1

Wpf-Material チェックボックスの境界線の色を変更するには、次のようにリソースをオーバーライドする必要があります。

<Style TargetType="Checkbox" BasedOn="{StaticResource MaterialDesignCheckBox}">
    <Style.Resources>
        <SolidColorBrush x:Key="MaterialDesignCheckBoxOff" Color="Red" />
    </Style.Resources>
</Style>

これは機能し、チェックボックスの境界が赤くなります。マテリアル チェックボックスでは、これ<Setter Property="BorderBrush" Value="Red" />は機能しません。

問題は、この境界プロパティを動的に適用しようとしていることです。そこで、IsDirty というブール値の DependencyProperty を追加したチェックボックス用のカスタム コンポーネントを作成しました。IsDirty == true でチェックボックス IsChecked の場合、背景を変更します (これはうまくいきます)。IsDirty == true でチェックボックスが IsChecked でない場合、この場合は (背景が透明であるため) 境界線の色を変更したいと思います。私は次のように何かを試しました:

<Style TargetType="{x:Type local:CustomCheckbox}" x:Key="dirtyCustomCheckbox" BasedOn="{StaticResource MaterialDesignCheckBox}">
    <Style.Resources>
        <SolidColorBrush x:Key="MaterialDesignCheckBoxOff" Color="Red" />
    </Style.Resources>
</Style>

<Style TargetType="{x:Type local:CustomCheckbox}" BasedOn="{StaticResource MaterialDesignCheckBox}">
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding IsDirty, RelativeSource={RelativeSource Self}}" Value="True" />
                <Condition Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="True" />
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="Background" Value="Red" />
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding IsDirty, RelativeSource={RelativeSource Self}}" Value="True" />
                <Condition Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="False" />
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="Style" Value="{StaticResource dirtyCustomCheckbox}" />
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

しかし、私はこの例外を取得します: ArgumentException: Style オブジェクトは、それが適用されるオブジェクトの Style プロパティに影響を与えることは許可されていません。

これを達成する方法について他に何か考えはありますか?

4

1 に答える 1