10

私はここで多くの同様のスレッドを見つけましたが、私の特定の問題に対処しているようには見えません。

特定の条件下でテキストボックスの背景を強調表示する必要があります。Highlightプロパティを作成し、スタイルでトリガーを使用して設定しようとしましたが、実際にはテキストが強調表示されません。

これが私のスタイルです。簡略化されています。

<Style x:Key="TextBoxStyle" BasedOn="{StaticResource CommonStyles}">
    <Style.Triggers>
        <Trigger Property="Elements:DataElement.Highlight" Value="True">
            <Setter Property="Control.Background"
                    Value="{DynamicResource EntryBoxHighlightBackground}"/>
        </Trigger>
    </Style.Triggers>
</Style>

要素は次のように定義されます。

xmlns:Elements="clr-namespace:MDTCommon.Controls.Forms.Elements">

次に、スタイルが適用されるセクションがあります。

<!-- Applies above style to all TextBoxes -->
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxContentHolder}" >
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
    <!-- Overrides the default Error Style -->
</Style>

DataElementクラスの背後にあるコードには、次のものがあります。

public static readonly DependencyProperty HighlightProperty = 
    DependencyProperty.Register("Highlight", typeof(bool), typeof(DataElement));

public bool Highlight
{
    get { return (bool)base.GetValue(HighlightProperty); }
    set { base.SetValue(HighlightProperty, value); }
}

最終的にUserControlから派生したDataElementであり、TextBoxオブジェクトとその他のオブジェクトへの参照が含まれています。

すべてのDataElementオブジェクトを格納するCustomFormクラスには、色を設定するために次のものがあります。

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow;

したがって、最初の問題は、DataElementのHighlightプロパティを設定しても、テキストボックスの背景が黄色で描画されないことです。

もう1つの問題は、このスタイルをすべてのテキストボックスに適用していることと、実際にはDataElement内に含まれていない他の領域にテキストボックスが存在する可能性があることを認識していることです。これにより、バインディングの問題が発生する可能性があります。

4

1 に答える 1

7

トリガーをDataTriggerに変換してみて、次のようにDataElementコントロールを直接参照するバインディングを追加します。

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True">
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/>
</DataTrigger>
于 2012-08-02T14:47:16.007 に答える