我怎么能得到自定义属性的值
本文关键字:自定义属性 怎么能 | 更新日期: 2023-09-27 18:10:31
我正在寻找一种方法来添加自定义属性到xaml控件。我找到了这个解决方案:在XAML中为元素添加自定义属性?
Class1.cs:
public static Class1
{
public static readonly DependencyProperty IsTestProperty =
DependencyProperty.RegisterAttached("IsTest",
typeof(bool),
typeof(Class1),
new FrameworkPropertyMetadata(false));
public static bool GetIsTestProperty(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
return (bool)element.GetValue(IsTestProperty);
}
public static void SetIsTestProperty(UIElement element, bool value)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
element.SetValue(IsTestProperty, value);
}
}
UserControl.xaml
<StackPanel x:Name="Container">
<ComboBox x:Name="cfg_Test" local:Class1.IsTest="True" />
<ComboBox x:Name="cfg_Test" local:Class1.IsTest="False" />
...
...
现在是我的问题,我怎样才能得到属性的值?
现在我想读取所有元素的值,在StackPanel中。
// get all elementes in the stackpanel
foreach (FrameworkElement child in
Helpers.FindVisualChildren<FrameworkElement>(control, true))
{
if(child.GetValue(Class1.IsTest))
{
//
}
}
但是child.GetValue(Class1.IsTest)
总是假的…怎么了?
首先,看起来,你的代码充满了错误,所以我不确定,如果你没有正确地复制它,或者是什么原因。
那么你的例子有什么问题呢?
- 你的DependencyProperty的getter和setter被错误地创建了。(名称后面不应该有"Property"。)它可能是:
public static bool GetIsTest(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
return (bool)element.GetValue(IsTestProperty);
}
public static void SetIsTest(UIElement element, bool value)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
element.SetValue(IsTestProperty, value);
}
- 其次,StackPanel的两个子控件共享相同的名称,这也是不可能的。
- 第三,您在foreach语句中错误地获取属性。这应该是:
if ((bool)child.GetValue(Class1.IsTestProperty))
{
// ...
}
- 请确保,您的助手。FindVisualChildren工作正常。您可以使用以下命令:
foreach (FrameworkElement child in Container.Children)
{
// ...
}