WPF如何为radiobuttons组设置datatrigger?

时间:2017-03-16 08:03:44

标签: wpf radio-button datatrigger

我有一个堆栈面板,有两组(由组名称定义)的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>

1 个答案:

答案 0 :(得分:1)

首先,当您将Style元素的RadioButton属性设置为{StaticResource AsToggleButton}时,不会应用您的隐式样式。

其次,示例标记中的所有三个RadioButton元素都属于同一个组。

第三,实际上只能选择单个组中的一个 RadioButton。这就是首先使用GroupName的目的。

关于您的实际问题,您只能通过使用带有条件的多数据触发器在“MaterialGroup”中设置IsChecked的{​​{1}}属性。

这样可行,即当RadioButton source属性返回true时,将只选择“MaterialGroup”中的一个单选按钮:

BooleanProperty
<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>

属于“SomeOtherGroup”的第三个<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}" /> 不会受到影响。