我想在正常编程中执行类似静态变量的操作,仅在使用依赖项属性的XAML中执行。
意思是我希望该属性:
我该怎么做?
答案 0 :(得分:4)
听起来你想要一个始终适用于每个元素的附加属性。我认为最简单的方法是通过依赖属性的CoerceValueCallback,你可以强制它总是返回静态值而不管元素的本地值(你会更新{的静态值) {3}})。
但这似乎是一种使用依赖属性系统的奇怪方法。也许你只需要一个中央绑定源?您可以使用Binding.Source
:
x:Static
来绑定到静态实例
{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; }
}
答案 1 :(得分:2)
易。
在DependencyObject类型上创建attached 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 的新属性,该属性获取/设置关联的 Herp 值。
假设这是在名称空间LolKThx
中名为WpfFtw
的类型中定义的,您可以这样使用它......
<Textblock
xmlns:lol="clr-namespace:WpfFtw"
lol:LolKThx.Derp="There's an implicit conversion for string -> Herp, btw" />
您可以在FrameworkPropertyMetadata
中指定回调,以执行设置/获取值所需的任何操作。