XAML階層のスタイルを理解しようとしています...シンプルで単純なTextbox ... " 「IsEnabled」フラグに基づいて背景色を無効にします。大丈夫です。テーマ/スタイルを引き継ぎ、追加のトリガーを適用しようとしています
今、私はTextBox ... MyTextBoxから派生した別のクラスを持っています。このクラスでは、プロパティ(依存プロパティではないため、DataTriggerを使用していました)があります。だから、私は正常に機能していたすべてのTextBoxアクションを保持したいが、現在、背景色を他の色に適切に更新するための新しいトリガーを取得する。ただ明確にするために、色のための私の静的リソースはすべて固体のブラシです。
<Style TargetType="TextBox" >
<Setter Property="FontFamily" Value="Courier New" />
<Setter Property="FontSize" Value="12" />
<Setter Property="Foreground" Value="{StaticResource MyForeground}" />
<Setter Property="Background" Value="{StaticResource MyBackground}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Name="Bd" BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="true">
<ScrollViewer Name="PART_ContentHost"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource MyDisBackground}" />
<Setter TargetName="PART_ContentHost" Property="Background"
Value="MyDisBackground"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Now, my derived (or so I was hoping) style that just adds additional trigger -->
<Style TargetType="local:MyTextBox" BasedOn="{StaticResource {x:Type TextBox}}" >
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsRequired}" Value="True">
<Setter Property="Background" Value="{StaticResource RequiredBackground}" />
</DataTrigger>
</Style.Triggers>
</Style>
私は何か簡単なものがありますか?
コードをコピーして、CodeNakedが最初に示した変更を行いました。** Binding = "{Binding Path = IsRequired、RelativeSource = {RelativeSource Self}}" **この変更だけで動作するように見えました(あなたの ' MyTextBoxクラスは、あなたのIsRequiredプロパティでINotifyPropertyChangedを実装しています。私が行ったことを正確に示すためにコードを投稿します。しかし、私は実際にそれを思いついた人ではなかったので、競合する回答を投稿したくありません。 。 – Scott
@Scott両方の入力のおかげで、彼らは私が望んでいたように動作しているように見え、両方の条件の下でどのようにDependencyPropertyとして、もう1つはINotifyPropertyChanged経由で(どちらが私が既に行っていたか)を確認してください。 – DRapp
@DRapp、あなたのソリューションが動作しているのを見てください!あなたが持っている2つのソリューションのうち... XAMLで値を直接設定できるように、依存プロパティのソリューションが必要です。私はちょうどあなたがあなたがDependencyPropertyを使用していないということをあなたの質問で特に言い、あなたがそれを避けることを望んだと思われたことに気づいた。 – Scott