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 プロパティに影響を与えることは許可されていません。
これを達成する方法について他に何か考えはありますか?