全局作用域附加的依赖项属性
本文关键字:依赖 属性 作用域 全局 | 更新日期: 2024-09-25 13:20:52
我想在正常编程中做一些类似于静态变量的事情,只在XAML中使用依赖属性。
这意味着我希望该房产:
- 做一个例子
- 每个元素都可见
- 可绑定
我该怎么做?
听起来您想要一个始终应用于每个元素的附加属性。我认为最简单的方法是通过依赖属性的CoerceValueCallback,在那里你可以强制它始终返回静态值,而不管元素的本地值是多少(你可以更新PropertyChangedCallback中的静态值)。
不过,这似乎是使用依赖属性系统的一种奇怪方式。也许你只需要一个中心绑定源?您可以通过使用x:Static
:分配Binding.Source
来绑定到静态实例
{Binding Source={x:Static Member=global:GlobalObject.SharedInstance},
Path=SharedValue}
注意,SharedValue
不是一个静态属性;它是从静态SharedInstance
属性访问的实例的属性:
public class GlobalObject {
private static readonly GlobalObject _instance = new GlobalObject();
public static GlobalObject SharedInstance { get { return _instance; } }
public object SharedValue { get; set; }
}
简单。
在DependencyObject类型上创建附加的DependencyProperty。
public static readonly DependencyProperty DerpProperty =
DependencyProperty.RegisterAttached(
"Derp",
typeof(DependencyObject),
typeof(Herp),
new FrameworkPropertyMetadata());
public static void SetDerp(DependencyObject element, Herp value)
{
element.SetValue(DerpProperty, value);
}
public static Herp GetDerp(DependencyObject element)
{
return (Herp)element.GetValue(DerpProperty);
}
定义在任何类型上,它也可以用于任何类型。在本例中,它在所有 假设这是在名称空间 您可以在DependencyObject
实例上创建一个名为Derp的新属性,该属性获取/设置关联的HerpWpfFtw
中一个名为LolKThx
的类型中定义的,您可以这样使用它。。。<Textblock
xmlns:lol="clr-namespace:WpfFtw"
lol:LolKThx.Derp="There's an implicit conversion for string -> Herp, btw" />
FrameworkPropertyMetadata
中指定回调,以执行设置/获取值所需的任何操作。