Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf XAML中附加的属性,不带单词';财产';_Wpf_Xaml_Attached Properties - Fatal编程技术网

Wpf XAML中附加的属性,不带单词';财产';

Wpf XAML中附加的属性,不带单词';财产';,wpf,xaml,attached-properties,Wpf,Xaml,Attached Properties,MS定义了附加属性,如“Grid.RowProperty”和“Grid.ColumnProperty”,但在XAML中,您只需使用“Grid.Row”和“Grid.Column”来调用它 我尝试对一个名为“MyValProperty”的附加属性执行同样的操作,该属性在类“Foo”上以“MyVal”的名称注册,但XAML不允许我键入“Foo.MyVal”,而是让我键入“Foo.MyValProperty”,MS是如何做到的?我错过了什么?作为背景,以下是我错过了什么 也可以使用标准特性格式,而不是

MS定义了附加属性,如“Grid.RowProperty”和“Grid.ColumnProperty”,但在XAML中,您只需使用“Grid.Row”和“Grid.Column”来调用它

我尝试对一个名为“MyValProperty”的附加属性执行同样的操作,该属性在类“Foo”上以“MyVal”的名称注册,但XAML不允许我键入“Foo.MyVal”,而是让我键入“Foo.MyValProperty”,MS是如何做到的?我错过了什么?

作为背景,以下是我错过了什么

也可以使用标准特性格式,而不是Set/Get构造。这是WPF拥有强大公约的领域之一。一个
附件属性
(或任何
从属属性
)有三个部分。第一个是使用
DependencyProperty.RegisterAttached
注册属性,返回值应设置为名为[property Name]property的公共静态变量。第二个是注册您的财产时的第一个参数应该是“[财产名称]”。第三个是用于与外部世界交互的Get/Set方法,应命名为Get[Property Name],Set[Property Name]

如果您按照约定进行设置,WPF将识别这两个属性是连接的,并应允许您按照预期使用该属性。

作为背景,下面介绍如何使用该属性

也可以使用标准特性格式,而不是Set/Get构造。这是WPF拥有强大公约的领域之一。一个
附件属性
(或任何
从属属性
)有三个部分。第一个是使用
DependencyProperty.RegisterAttached
注册属性,返回值应设置为名为[property Name]property的公共静态变量。第二个是注册您的财产时的第一个参数应该是“[财产名称]”。第三个是用于与外部世界交互的Get/Set方法,应命名为Get[Property Name],Set[Property Name]


如果您按照约定进行设置,WPF将识别这两个属性是连接的,并应允许您按预期使用该属性。

您是否可以共享代码片段…?您是否可以共享代码片段…?哈!我想我已经注册正确了。是的,但是我在GetXxx/SetXxx静态调用中意外地使用了错误的名称(我有GetXxxProperty/SetXxxProperty)。我的疏忽。标记为answer.BTW,您说“您还可以使用标准属性格式,而不是Set/Get构造。”但您不认为可以使用附加属性。有一个例子吗?嗯,我想你可以,但我还没有在代码中找到任何例子。当然我不会经常使用附加属性,所以我会坚持使用有效的属性。是的。。。不确定是否可以,因为getter和setter是静态的。诚然,您可能可以使它们成为扩展方法,但C#中没有扩展属性。另外,还有一些参数,我很确定这些参数不允许使用属性。尽管如此,您还是在显示我的getter/setter的名称错误,从而停止了XAML的编译(想想看,这很奇怪,因为runtile上的XAML只是绕过了这个名称,使用了您注册的名称!如图所示!)好吧,我编辑了答案,删除了对标准属性的引用。哈!我想我已经注册正确了。是的,但是我在GetXxx/SetXxx静态调用中意外地使用了错误的名称(我有GetXxxProperty/SetXxxProperty)。我的疏忽。标记为answer.BTW,您说“您还可以使用标准属性格式,而不是Set/Get构造。”但您不认为可以使用附加属性。有一个例子吗?嗯,我想你可以,但我还没有在代码中找到任何例子。当然我不会经常使用附加属性,所以我会坚持使用有效的属性。是的。。。不确定是否可以,因为getter和setter是静态的。诚然,您可能可以使它们成为扩展方法,但C#中没有扩展属性。另外,还有一些参数,我很确定这些参数不允许使用属性。尽管如此,您还是在显示我的getter/setter的名称错误,从而停止了XAML的编译(想想看,这很奇怪,因为runtile上的XAML只是绕过了这个名称,并使用了您注册的名称!如图所示!)好的,我编辑了答案以删除对标准属性的引用。
public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
    "IsBubbleSource",
    typeof(Boolean),
    typeof(AquariumObject),
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
    element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
    return (Boolean)element.GetValue(IsBubbleSourceProperty);
}