我在这里发现了许多类似的线程,但是似乎都没有解决我的特定问题。

在某些情况下,我需要突出显示文本框的背景。我已经创建了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属性不会导致文本框背景以黄色绘制。

另一个问题是,我意识到我将这种样式应用于所有文本框,并且可能在其他区域中的文本框实际上未包含在DataElement中,这可能会导致绑定(bind)问题。

最佳答案

尝试将触发器转换为DataTrigger,然后添加将直接查看DataElement控件的绑定(bind),如下所示:

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True">
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/>
</DataTrigger>

10-04 15:49