【发布时间】:2014-12-08 17:33:47
【问题描述】:
当我单击按钮时,是否可以使用 xaml 设置我的列表视图的控件模板?
现在我知道当我选择了ListViewItem 时如何设置我的内容模板,但不知道当列表视图之外的内容发生更改时如何更改我的控件模板。
我想将我的ListItemTemplate 更改为在单击相应按钮时使用RentTemplate 或BuyTemplate。
<Button x:Name="RentButton" />
<Button x:Name="BuyButton" />
<ListView Name="ItemsList">
<ListView.Resources>
<!-- unselected item template -->
<DataTemplate x:Key="DefaultItemTemplate">
</DataTemplate>
<!-- selected item template -->
<DataTemplate x:Key="SelectedItemTemplate">
</DataTemplate>
<DataTemplate x:Key="RentTemplate">
</DataTemplate>
<DataTemplate x:Key="BuyTemplate">
</DataTemplate>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<!-- set properties for all items -->
<Setter Property="ContentTemplate" Value="{StaticResource DefaultItemTemplate}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<!-- change what the selected item looks like -->
<Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
编辑
我正在尝试使用 DataTriggers 来选择更改属性时要使用的模板(单击按钮时会更改)。我不认为这种情况是理想的,但我不知道还有什么办法。
现在的问题是我似乎无法在同一个 MultiTrigger 中混合属性触发器和 DataTriggers。
我正在尝试制作的场景如下:
如果我推BuyButton,我想看到BuyTemplate。
RentButton 和 RentTemplate 相同。
但是当我按下第三个按钮OverviewButton 时,我想在两个模板之间做出选择,这取决于当前的ListBoxItem 是否被选中。
或者我是否滥用了 DataTemplates 和 DataTriggers,有没有更好的方法来实现这一点?
<Window.Resources>
<!-- unselected item template -->
<DataTemplate x:Key="DefaultItemTemplate">
</DataTemplate>
<!-- selected item template -->
<DataTemplate x:Key="SelectedItemTemplate">
</DataTemplate>
<DataTemplate x:Key="RentTemplate">
</DataTemplate>
<DataTemplate x:Key="BuyTemplate">
</DataTemplate>
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="false"/>
<Condition Binding="{Binding SelectedType}" Value="Overview" />
</MultiDataTrigger.Conditions>
<Setter Property="ContentTemplate" Value="{StaticResource DefaultItemTemplate}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Binding="{Binding SelectedType}" Value="Overview" />
</MultiDataTrigger.Conditions>
<Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
</MultiDataTrigger>
<DataTrigger Binding="{Binding SelectedType}" Value="Rent">
<Setter Property="ContentTemplate" Value="{StaticResource RentTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedType}" Value="Buy">
<Setter Property="ContentTemplate" Value="{StaticResource BuyTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
【问题讨论】:
-
您似乎正在搜索
DataTemplateSelector。例如,请参阅本教程:tech.pro/tutorial/807/… -
@FlatEric:我会将其发布为答案,并附上使用示例。
标签: c# wpf controltemplate