我已经遇到了问题,使用ScrollViewer。
下面是示例视图模型:
public class A
{
public string Text { get; set; }
}
public class B
{
public int Number { get; set; }
}...and DataTemplateSelector
public class ViewModelTemplateSelector : DataTemplateSelector
{
public DataTemplate ATemplate { get; set; }
public DataTemplate BTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is A)
return ATemplate;
if (item is B)
return BTemplate;
return base.SelectTemplate(item, container);
}
}XAML:
<Grid>
<Grid.Resources>
<local:ViewModelTemplateSelector x:Key="ViewModelTemplateSelectorKey">
<local:ViewModelTemplateSelector.ATemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</local:ViewModelTemplateSelector.ATemplate>
<local:ViewModelTemplateSelector.BTemplate>
<DataTemplate>
<TextBox Text="{Binding Number}"/>
</DataTemplate>
</local:ViewModelTemplateSelector.BTemplate>
</local:ViewModelTemplateSelector>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ListBox x:Name="ListBox" ItemsSource="{Binding}"/>
<ScrollViewer Grid.Row="1" Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
<ContentControl Grid.Row="2" Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
</Grid>这就是在ListBox中选择任何项目时所发生的事情

如您所见,ScrollViewer忽略ContentTemplateSelector,而ContentControl没有。ScrollViewer是从ContentControl继承而来的,乍一看,没有理由这样做。
我知道,如果我声明A和B的隐式数据模板,ScrollViewer将正确处理它们,但对于我的实际应用程序来说,这不是一个选项。
这是已知的臭虫吗?还是我漏掉了什么?
UPD.
我已经提交了一份关于连接小姐的问题。
发布于 2014-12-24 17:20:37
我没有测试语法。如果是错的,请告诉我,我会删除。
这就是我要尝试的
<ScrollViewer Grid.Row="1">
<ContentControl Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
</ScrollViewer>发布于 2014-12-24 17:59:32
这应该能起作用:
<ScrollViewer Grid.Row="1">
<ContentPresenter Content="{Binding SelectedItem, ElementName=ListBox}" ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}" />
</ScrollViewer>https://stackoverflow.com/questions/27633050
复制相似问题