美好的一天!
我有SurfaceListBox
及其使用XAML
设计的项目模板。我添加了一个IsSelected = true
触发器,它可以正常工作,但是如果要再次选择相同的项目,我想取消选择它。如果选择了另一个项目,但无法取消选择同一项目,我可以做到。
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="SelectTxt" Property="Visibility" Value="Collapsed" />
<Setter TargetName="DeselectTxt" Property="Visibility" Value="Visible" />
<Setter TargetName="SelectionBorder" Property="Background" Value="#3ab175" />
<Setter TargetName="CheckMark" Property="Visibility" Value="Visible" />
<Setter TargetName="CheckBorder" Property="BorderBrush" Value="White" />
</Trigger>
</ControlTemplate.Triggers>
我想在取消选择时恢复所有的setter属性。
答案 0 :(得分:1)
您可以将CheckBox
添加到ItemTemplate
中以实现选择和取消选择。在此情况下,CheckBox
的{{1}}属性绑定到您的Checked
的{{1}}。因此,您现有的IsSelected
将按原样工作。
ListViewItem
如果您不想看到Triggers
,则可以使用<ListView.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}"
Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"/>
</DataTemplate>
</ListView.ItemTemplate>
获得相同的功能。喜欢,
CheckBox
注意:为ToggleButton
和<ListView.ItemTemplate>
<DataTemplate>
<ToggleButton Content="{Binding}"
Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border BorderThickness="0">
<ContentPresenter/>
</Border>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
</DataTemplate>
</ListView.ItemTemplate>
内容绑定使用适当的属性名称。