WPF:XAML属性声明未通过设置器设置吗?

WPF: XAML property declarations not being set via Setters?

我有一个WPF应用程序,在其中我要通过XAML声明设置的代码隐藏中使用依赖项属性。

例如

1
<l:SelectControl StateType="A" Text="Hello"/>

因此,在此示例中,我有一个名为SelectControlUserControl,它具有一个名为StateType的属性,该属性可以操纵其设置程序中的其他一些属性。

为了帮助说明问题,我在示例中放置了另一个名为Text的属性,请继续阅读,我将作进一步解释。

代码隐藏摘录...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(SelectControl));

public String Text
{
  get { return (String)GetValue(TextProperty); }
  set { SetValue(TextProperty, value); }
}

public static readonly DependencyProperty StateTypeProperty = DependencyProperty.Register("StateType", typeof(String), typeof(SelectControl));

public String StateType
{
  get { return (String)GetValue(StateTypeProperty) }
  set
    {
      switch (value)
      {
        case"A":
          AnotherPropertyBoolean = true;
          break;
        case"B":
          AnotherPropertyBoolean = false;
          break;
       default:
         // this is only an example...
      }
   }
}

现在,如果我在设置器上设置了一个断点(对于StateTypeText),结果表明它从未执行过。

但是为Text声明的值,即" Hello"出现在数据绑定的TextBox中,当然,我将另一个文本控件绑定到StateType的值,我也可以看到。

有人知道发生了什么吗?


依赖项属性的" CLR包装器"仅在通过代码完成后才被调用。 XAML取决于在DependencyProperty.Register(...)调用中指定的名称。 因此,不要像上面那样为您的依赖项属性"扩展"设置程序的逻辑,只需将自定义逻辑放在PropertyChangedCallback函数中即可。