gpt4 book ai didi

c# - 关于多个 FrameworkElement 实例的 DependencyProperty 行为

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:02 24 4
gpt4 key购买 nike

因此,我尝试使用 DependencyProperty 来解决有关跨 subview 传递本地 ViewModel 的问题。然而,我的脑海里突然冒出一个问题。

例如,我需要为某个 FrameworkElement 创建多个实例,例如 UserControlUserControl 定义了一个 DependencyProperty。如书中所述,依赖属性实例应该是staticreadonlyDependencyProperty 在这种情况下如何工作?它的工作方式是否与传统的 UserControl 属性或您传递给 DependencyProperty 的任何对象实例相同,它将传递给所述 的所有实例用户控件?

最佳答案

是的,它将作为一个正常的属性(property)运作。如果您需要特定控件的属性,即单个控件的一个属性,您可以只使用依赖属性。它们将通过该类的所有实例。但是,如果您想要多个控件上的属性,则应使用 attached 依赖属性,该属性将对特定命名空间内的所有成员可用。属性,例如:Canvas.Top、DockPanel.Dock 是附加 DependencyProperty。

附加依赖属性示例:

public class MyDependencyClass : DependencyObject
{
public static readonly DependencyProperty IsSelectedProperty;

public static void SetIsSelected(DependencyObject DepObject, Boolean value)
{
DepObject.SetValue(IsSelectedProperty, value);
}

public static Boolean GetIsSelected(DependencyObject DepObject)
{
return (Boolean)DepObject.GetValue(IsSelectedProperty);
}

private static bool IsSelectedValid(object Value)
{
if (Value.GetType() == typeof(bool))
{
return true;
}
else
{
return false;
}
}

static MyDependencyClass()
{
FrameworkPropertyMetadata MetaData = new FrameworkPropertyMetadata((Boolean)false);

IsSelectedProperty = DependencyProperty.RegisterAttached("IsSelected",
typeof(Boolean),
typeof(MyDependencyClass),
MetaData,
new ValidateValueCallback(IsSelectedValid));
}
}

它们还包含有用的回调,例如 OnPropertyChangedCallbackValidateValueCallback,可以放在附加逻辑中。

这些属性在 XAML 中也可用。添加“本地”命名空间:

xmlns:local="clr-namespace:SampleApp"

为元素定义:

<Button Name="Button1" local:MyDependencyClass.IsSelected="True" />
<Button Name="Button2" local:MyDependencyClass.IsSelected="False" />

...

<ListBoxItem Name="Sample" local:MyDependencyClass.IsSelected="True" />

访问触发器中的属性:

<Trigger Property="local:MyDependencyClass.IsSelected" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>

在代码中使用附加的依赖属性:

if (CurrentButtonName == MyButton.Name)
{
MyDependencyClass.SetIsSelected(CurrentButton, true);
}
else
{
MyDependencyClass.SetIsSelected(CurrentButton, false);
}

有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/ms749011.aspx

关于c# - 关于多个 FrameworkElement 实例的 DependencyProperty 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16963221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com