Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改自定义属性不会触发绑定更新_C#_Wpf_Triggers_Dependency Properties - Fatal编程技术网

C# 更改自定义属性不会触发绑定更新

C# 更改自定义属性不会触发绑定更新,c#,wpf,triggers,dependency-properties,C#,Wpf,Triggers,Dependency Properties,我尝试创建一个名为MyComboBox的自定义组合框。它有一个按钮,用于在上一项和下一项之间切换 我将底色存储在BaseBackground中。这很有用,因为我不希望FrontGlyph具有从模板化父级继承的Background 这是我的WPF代码: 这是MyComboBox的源代码: class MyComboBox:组合框 { 公共静态只读从属属性BaseBackgroundProperty; 公共SolidColorBrush BaseBackground{get{return(Sol

我尝试创建一个名为
MyComboBox
的自定义组合框。它有一个按钮,用于在上一项和下一项之间切换

我将底色存储在
BaseBackground
中。这很有用,因为我不希望
FrontGlyph
具有从模板化父级继承的
Background

这是我的WPF代码:


这是MyComboBox的源代码:

class MyComboBox:组合框
{
公共静态只读从属属性BaseBackgroundProperty;
公共SolidColorBrush BaseBackground{get{return(SolidColorBrush)GetValue(BaseBackgroundProperty);}set{SetValue(BaseBackgroundProperty,value);}
静态mycombox()
{
BaseBackgroundProperty=DependencyProperty.Register(“BaseBackground”、typeof(SolidColorBrush)、typeof(MyComboBox)、new FrameworkPropertyMetadata(Bruss.Lime、FrameworkPropertyMetadata Options.AffectsRender、OnBaseBackgroundPropertyChanged));
}
公共邮箱()
{
DefaultStyleKey=typeof(MyComboBox);
}
BaseBackgroundPropertyChanged上的私有静态无效(DependencyObject发送方,DependencyPropertyChangedEventArgs参数)
{
//当鼠标位于控件上方时,触发器尝试设置BaseBackground时,不会调用此函数
}
}
当我将鼠标悬停在控件上时,它应该会改变颜色。我应该能够通过更改
BaseBackground
来实现这一点,因为
FrontGlyph
BaseComboBox
都将其背景颜色绑定到该框。尽管如此,代码还是可以编译,但没有发生更改。不仅在UI上,而且如果我调试代码,我也看不到C#中的变化

如果我更改
FrontGlyph
的背景色,并将
BaseComboBox.BackgroundColor
绑定到该背景色,则效果很好

有人能解释一下为什么我的自定义属性
BaseBackground
的更改没有注册吗?它不能是标准的“实现<代码>INotifyPropertyChanged接口。”问题,因为我使用<代码>笔刷作为我的属性,并且笔刷在其他任何地方都能很好地工作。:)

我的实现可能看起来很愚蠢。嗯,我是WPF的新手。另外,我不想让整个实现给您带来负担,只是尝试复制关键部分

更新 我发现在我的源代码中,如果满足某些条件,我会设置
BaseBackground=newsolidcolorbush(…)
。如果我删除这行代码,现在触发器工作,BaseBackground被指定为Goldenrod颜色

但我想知道,为什么从C代码更改DependencyProperty会阻止它从XAML标记工作。此外,我需要他们两个都工作


谢谢。

总结

我认为您可能想做的是在名称
“BaseBackground”
(而不是
“Background”
)下注册
BaseBackgroundProperty
),因为您的xaml正在尝试使用该名称设置属性

详细信息

查看您的代码,我认为您的
MyComboBox.BaseBackground
属性从未设置的原因是,它正在使用名称
“Background”
向依赖属性系统注册。这意味着您有一个在基类中注册为
“Background”
Control.BackgroundProperty
)的属性,以及一个在派生类中注册为
“Background”
MyComboBox.BaseBackgroundProperty
)的属性。因此,从理论上讲,在xaml中设置
“Background”
应该以设置
MyComboBox.BaseBackgroundProperty
结束,而设置
“Control.Background”
应该以设置
Control.Background
属性结束


虽然这在理论上有效,但我不知道它在实践中是否有效。这也不是真正的做事方式。如果您想以某种方式修改类的现有属性,可以在类型初始值设定项(也称为静态构造函数)中重写
Control.BackgroundProperty
的元数据,但我认为这不是您的意图。您的xaml正在尝试设置名为
“BaseBackground”

的不存在属性。根据您的问题更新,您所做的似乎是在dependency属性上设置本地值,这可能会破坏模板绑定。在通过其他方式设置目标的特定情况下,单向绑定可能会发生这种情况。在这种情况下,您似乎正在设置源代码,但它可能导致绑定中断

您可以通过将绑定的属性设置为“High”来调试绑定。(您可能需要使用标准的
{Binding RelativeSource={RelativeSource TemplatedParent},