WPF 如何为单选按钮组设置数据触发?
WPF How do I set datatrigger for group of radiobuttons?
我有两个单选按钮组(由组名定义)的堆栈面板。如何为其中一组设置数据触发?
到目前为止,我尝试了以下无效的代码
<UserControl.Resources>
<Style TargetType="RadioButton">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="GroupName" Value="MaterialGroup"></Condition>
<Condition Binding="{Binding BooleanProperty}" Value="true"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters x:Uid="btn2">
<Setter Property="IsChecked" Value="true"></Setter>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<RadioButton GroupName="MaterialGroup" Style="{StaticResource AsToggleButton}" Content="{Binding ActualMaterialName}" Margin="0,0,5,0"></RadioButton>
<RadioButton GroupName="MaterialGroup" x:Uid="btn2" Style="{StaticResource AsToggleButton}" Content="{Binding NextMaterialName}" Margin="0,0,5,0"></RadioButton>
<RadioButton GroupName="MaterialGroup" Style="{StaticResource AsToggleButton}" Content="Text" Margin="0,0,5,0" Checked="RadioButton_Checked" Unchecked="RadioButton_Unchecked"></RadioButton>
首先,当您将 RadioButton
元素的 Style
属性 设置为 {StaticResource AsToggleButton}
时,将不会应用您的隐式样式。
其次,示例标记中的所有三个 RadioButton
元素都属于同一组。
第三,单个组中实际上只能选择一个 RadioButton
。这就是首先使用 GroupName
的目的。
至于您的实际问题,您可以仅通过使用 MultiData 来设置 "MaterialGroup" 中 RadioButton
的 IsChecked
属性 有条件触发。
这行得通,即当 BooleanProperty
source 属性 returns true:
时,只会选择 "MaterialGroup" 中的一个单选按钮
<Style x:Key="theStyle" TargetType="RadioButton">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding GroupName, RelativeSource={RelativeSource Self}}" Value="MaterialGroup"></Condition>
<Condition Binding="{Binding BooleanProperty}" Value="true"></Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsChecked" Value="true"></Setter>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
<RadioButton GroupName="MaterialGroup" Content="ActualMaterialName" Style="{StaticResource theStyle}" />
<RadioButton GroupName="MaterialGroup" Content="Binding NextMaterialName" Style="{StaticResource theStyle}" />
<RadioButton GroupName="SomeOtherGroup" Content="Text" Style="{StaticResource theStyle}" />
属于"SomeOtherGroup"的第三个RadioButton
不会受到影响。
我有两个单选按钮组(由组名定义)的堆栈面板。如何为其中一组设置数据触发?
到目前为止,我尝试了以下无效的代码
<UserControl.Resources>
<Style TargetType="RadioButton">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="GroupName" Value="MaterialGroup"></Condition>
<Condition Binding="{Binding BooleanProperty}" Value="true"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters x:Uid="btn2">
<Setter Property="IsChecked" Value="true"></Setter>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<RadioButton GroupName="MaterialGroup" Style="{StaticResource AsToggleButton}" Content="{Binding ActualMaterialName}" Margin="0,0,5,0"></RadioButton>
<RadioButton GroupName="MaterialGroup" x:Uid="btn2" Style="{StaticResource AsToggleButton}" Content="{Binding NextMaterialName}" Margin="0,0,5,0"></RadioButton>
<RadioButton GroupName="MaterialGroup" Style="{StaticResource AsToggleButton}" Content="Text" Margin="0,0,5,0" Checked="RadioButton_Checked" Unchecked="RadioButton_Unchecked"></RadioButton>
首先,当您将 RadioButton
元素的 Style
属性 设置为 {StaticResource AsToggleButton}
时,将不会应用您的隐式样式。
其次,示例标记中的所有三个 RadioButton
元素都属于同一组。
第三,单个组中实际上只能选择一个 RadioButton
。这就是首先使用 GroupName
的目的。
至于您的实际问题,您可以仅通过使用 MultiData 来设置 "MaterialGroup" 中 RadioButton
的 IsChecked
属性 有条件触发。
这行得通,即当 BooleanProperty
source 属性 returns true:
<Style x:Key="theStyle" TargetType="RadioButton">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding GroupName, RelativeSource={RelativeSource Self}}" Value="MaterialGroup"></Condition>
<Condition Binding="{Binding BooleanProperty}" Value="true"></Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsChecked" Value="true"></Setter>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
<RadioButton GroupName="MaterialGroup" Content="ActualMaterialName" Style="{StaticResource theStyle}" />
<RadioButton GroupName="MaterialGroup" Content="Binding NextMaterialName" Style="{StaticResource theStyle}" />
<RadioButton GroupName="SomeOtherGroup" Content="Text" Style="{StaticResource theStyle}" />
属于"SomeOtherGroup"的第三个RadioButton
不会受到影响。