将WPF样式触发器绑定到自定义依赖项属性

将WPF样式触发器绑定到自定义依赖项属性,wpf,triggers,styles,dependencies,Wpf,Triggers,Styles,Dependencies,我在这里找到了许多类似的线索,但没有一条能够解决我的具体问题 在某些情况下,我需要突出显示文本框的背景。我创建了一个Highlight属性,并尝试在样式中使用触发器来设置它,但它实际上从未高亮显示文本 以下是我的风格,简化版: <Style x:Key="TextBoxStyle" BasedOn="{StaticResource CommonStyles}"> <Style.Triggers> <Trigger Property="Elem

我在这里找到了许多类似的线索,但没有一条能够解决我的具体问题

在某些情况下,我需要突出显示文本框的背景。我创建了一个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>
然后是应用样式的部分:

<!-- 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>
最终从UserControl派生的数据元素,它包含对TextBox对象以及其他对象的引用

在包含所有DataElement对象的CustomForm类中,我有以下设置颜色的选项

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow;
因此,第一个问题是为数据元素设置Highlight属性不会导致文本框背景以黄色绘制


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

尝试将触发器转换为DataTrigger,并添加一个直接查看DataElement控件的绑定,如下所示:

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


尝试在样式中添加setter“background”我省略了很多样式以保持简单,并将重点放在我认为可能存在问题的区域。请确定:您不应该在XAML中为“Elements”指定程序集吗?输出窗口是否显示任何错误?为什么?简单的
触发器应该支持依赖属性,不是吗?
Resources["EntryBoxHighlightBackground"] = Brushes.Yellow;
<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True">
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/>
</DataTrigger>