如何将资源中的Setter绑定到多个控件?

How to bind a Setter in Resources to multiple controls?

我有一个 UserControl,其中有两个 ComboBoxes,它们共享相同的 IsEnabled 属性 的定义:

<ComboBox.IsEnabled>
    <MultiBinding Converter="{StaticResource nullMultiConverter}">
        <Binding Path="ItemsSource"/>
        <Binding ElementName="aThirdIrrelevantComboBox" Path="SelectedItem"/>
    </MultiBinding>
</ComboBox.IsEnabled>

基本上,它表示如果 this 组合框的 ItemsSource 为空 如果 aThirdIrrelevantComboBoxSelectedItem 为null,this 组合框的 IsEnabledfalse(否则为 true)。

所以我有两个具有完全相同定义(复制粘贴)的组合框。 我怎样才能避免为每个需要它的控件重复这个定义?

我尝试在我的 UserControl.Resources 中创建一个 Setter,但我似乎不知道如何绑定它。

<UserControl.Resources>
    <converters:NullToEnabledMultiConverter x:Key="nullMultiConverter"/>
    <Setter Property="ComboBox.IsEnabled" x:Key="shpEnabled">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource nullMultiConverter}">
                <Binding Path="ItemsSource"/>
                <Binding ElementName="aThirdIrrelevantComboBox" Path="SelectedItem"/>
            </MultiBinding>
        </Setter.Value>
    </Setter>
</UserControl.Resources>

此绑定不起作用,我的组合框仍处于启用状态:

<ComboBox IsEnabled=IsEnabled="{Binding Value, Source={StaticResource shpEnabled}}"/>

将您的 Setter 放入 Style 并命名为 that

<Style x:Key="ShpEnabledStyle" TargetType="{x:Type ComboBox}">
    <Setter Property="ComboBox.IsEnabled">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource nullMultiConverter}">
                <Binding Path="ItemsSource"/>
                <Binding ElementName="aThirdIrrelevantComboBox" Path="SelectedItem"/>
            </MultiBinding>
        </Setter.Value>
    </Setter>
</Style>

然后将 Style 应用于相关的 ComboBox(es):

<ConboBox Style="{StaticResource ShpEnabledStyle}" ... />