【发布时间】:2017-10-15 14:50:30
【问题描述】:
我有这个 ScrollViewer:
<ScrollViewer x:Name="myScrollViewer">
<ItemsControl x:Name="myItemsControl" ItemTemplateSelector="{DynamicResource myItemtemplateSelector}" ItemsPanel="{StaticResource myItemsPanel}" />
</ScrollViewer>
我用一个有一个布尔参数的类填充ItemsControl。如果是真的,我想打电话给ItemTemplateSelector;还有一个是假的。
我正在尝试这样的事情:
<ItemsControl x:Name="myItemsControl" ItemsPanel="{StaticResource myItemsPanel}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=myBoolean}" Value="False">
<Setter Property="ContentTemplate" Value="{DynamicResource SubdisciplineDataTemplateSelector}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=myBoolean}" Value="True">
<Setter Property="ContentTemplate" Value="{DynamicResource SubdisciplineDataTemplateSelector2}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是正确的方法吗?
【问题讨论】:
-
我可以试试
<Setter TargetName="myItemsControl" Property="ContentTemplate" ...。但实际上,我只是将这两个项目模板选择器合并为一个,除了其他任何内容之外,它还可以查看myBoolean的值。当然,我也会使用 .NET 命名约定。如果您要重用这两个 itemtemplate 选择器并且希望将它们区分开来,那么有许多简单的方法可以重用 C# 中的代码,而无需任何 XAML 操作。
标签: wpf triggers contenttemplate contenttemplateselector