在代码中读取 DependencyProperty 的值(GetValue() 不起作用)
Value of DependencyProperty reading in code (GetValue() does not work)
我创建了一个用户控件,想在代码中获取 DependencyProperty "ListBoxReadOnly" 的值。我在 XAML:
中设置值
<control:AutoCompleteTextBox x:Name="actbFullName" ListBoxReadOnly="True"/>
当我试图读取构造函数中的值时,它只显示默认值 false。
我试图通过回调获取值,但可能我对整个框架缺乏一些了解。由于回调是一个静态方法,我不能将它应用到我的用户控件的实例。
public static readonly DependencyProperty ListBoxReadOnlyDependency =
DependencyProperty.Register("ListBoxReadOnly", typeof(bool),
typeof(AutoCompleteTextBox), FrameworkPropertyMetadata
(false, FrameworkPropertyMetadataOptions.AffectsRender));
public bool ListBoxReadOnly
{
get
{
return (bool) GetValue(ListBoxReadOnlyDependency);
}
set
{
SetValue(ListBoxReadOnlyDependency, value);
}
}
// constructor of user control
public AutoCompleteTextBox()
{
InitializeComponent();
// *** shows "false" (default value) even though set to true in XAML
// *** see XAML above ***
var test = ListBoxReadOnly;
}
感谢任何帮助:-)
我希望您的代码(按原样)显示错误。 DP 初始化为 false。在您的控件的构造函数中,尚未应用默认控件样式和 xaml 中设置的属性。
样式仅在调用 OnApplyTemplate() 后应用(除非您强制执行)。
如果要跟踪 DP 更改,则需要 DP 更改处理程序。
When I tried to read the value in the constructor, it only shows the default value which is false.
控件初始化前不能设置属性
Since the callback is a static method, I cannot apply it to the instance of my user control.
您可以在回调中将 DependencyObject
转换为您的控件类型:
public static readonly DependencyProperty ListBoxReadOnlyDependency =
DependencyProperty.Register("ListBoxReadOnly", typeof(bool),
typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata
(false, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnChanged)));
private static void OnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
AutoCompleteTextBox ctrl = (AutoCompleteTextBox)d;
var x = ctrl.ListBoxReadOnly;
//...
}
我创建了一个用户控件,想在代码中获取 DependencyProperty "ListBoxReadOnly" 的值。我在 XAML:
中设置值<control:AutoCompleteTextBox x:Name="actbFullName" ListBoxReadOnly="True"/>
当我试图读取构造函数中的值时,它只显示默认值 false。
我试图通过回调获取值,但可能我对整个框架缺乏一些了解。由于回调是一个静态方法,我不能将它应用到我的用户控件的实例。
public static readonly DependencyProperty ListBoxReadOnlyDependency =
DependencyProperty.Register("ListBoxReadOnly", typeof(bool),
typeof(AutoCompleteTextBox), FrameworkPropertyMetadata
(false, FrameworkPropertyMetadataOptions.AffectsRender));
public bool ListBoxReadOnly
{
get
{
return (bool) GetValue(ListBoxReadOnlyDependency);
}
set
{
SetValue(ListBoxReadOnlyDependency, value);
}
}
// constructor of user control
public AutoCompleteTextBox()
{
InitializeComponent();
// *** shows "false" (default value) even though set to true in XAML
// *** see XAML above ***
var test = ListBoxReadOnly;
}
感谢任何帮助:-)
我希望您的代码(按原样)显示错误。 DP 初始化为 false。在您的控件的构造函数中,尚未应用默认控件样式和 xaml 中设置的属性。
样式仅在调用 OnApplyTemplate() 后应用(除非您强制执行)。
如果要跟踪 DP 更改,则需要 DP 更改处理程序。
When I tried to read the value in the constructor, it only shows the default value which is false.
控件初始化前不能设置属性
Since the callback is a static method, I cannot apply it to the instance of my user control.
您可以在回调中将 DependencyObject
转换为您的控件类型:
public static readonly DependencyProperty ListBoxReadOnlyDependency =
DependencyProperty.Register("ListBoxReadOnly", typeof(bool),
typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata
(false, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnChanged)));
private static void OnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
AutoCompleteTextBox ctrl = (AutoCompleteTextBox)d;
var x = ctrl.ListBoxReadOnly;
//...
}