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" 中 RadioButtonIsChecked 属性 有条件触发。

这行得通,即当 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不会受到影响。