我试图让几个ToggleButton有点像单选按钮 - 但重要的区别是没有检查是有效的情况(只有最多一次可以检查一个,它们是互斥的。)
以下是一些几乎可行的XAML:
<Window>
<Grid>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<ToggleButton x:Name="ShowLineGridToggleButton">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=ShowDotGridToggleButton}" Value="True">
<Setter Property="IsChecked" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
<Image Source="../Images/ShowLineGrid.png" />
</ToggleButton>
<ToggleButton x:Name="ShowDotGridToggleButton">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=ShowLineGridToggleButton}" Value="True">
<Setter Property="IsChecked" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
<Image Source="../Images/ShowDotGrid.png" />
</ToggleButton>
</ToolBar>
</ToolBarTray>
<Grid>
</Window>
点击一个按钮确实会取消选中另一个按钮。不幸的是,发生的事情是点击的按钮没有被检查。当鼠标移过它时,背景会正确变化,但当鼠标移开时,按钮显示为未选中。
注释掉Setters可以检查点击的按钮。就像Setter也取消选中点击的按钮一样。
我宁愿在XAML中处理这个问题而不是诉诸于通过事件处理程序在代码中实现;这会将所有内容都定义在一个地方。
想法?
TIA!
答案 0 :(得分:0)
尝试将ToggleButtons
更改为RadioButtons
。然后,您可以为每个模板应用ToggleButton
模板,解决您的问题。
这应该为你编译:
<Window>
<Window.Resources>
<Style TargetType="{x:Type RadioButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<RadioButton x:Name="ShowLineGridToggleButton">
<Image Source="../Images/ShowLineGrid.png" />
</RadioButton>
<RadioButton Grid.Column="1" x:Name="ShowDotGridToggleButton">
<Image Source="../Images/ShowDotGrid.png" />
</RadioButton>
</Grid>
</ToolBar>
</ToolBarTray>
</Grid>
</Window>
正如您所看到的,您必须将单选按钮放在他们自己的列中,否则他们会对点击事件感到困惑。