我一直在寻找一种向xaml控件添加自定义属性的方法。我找到了这个解决方案:Adding custom attributes to an element in 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)
总是假的...出了什么问题?
答案 0 :(得分:0)
首先,似乎你的代码充满了错误,所以我不确定,如果你没有正确复制它,或者是什么原因。
你的例子中有什么问题?
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);
}
if ((bool)child.GetValue(Class1.IsTestProperty))
{
// ...
}
foreach (FrameworkElement child in Container.Children)
{
// ...
}
希望这有帮助。