C# 离散wpf依赖属性get和set扩展的角色
鉴于这一来源: 这个静态类具体来说:C# 离散wpf依赖属性get和set扩展的角色,c#,wpf,xaml,dependency-properties,C#,Wpf,Xaml,Dependency Properties,鉴于这一来源: 这个静态类具体来说: public static class TreeViewItemBehavior { public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem) { return (bool)treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty); } public static void SetIs
public static class TreeViewItemBehavior
{
public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem)
{
return (bool)treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
}
public static void SetIsBroughtIntoViewWhenSelected(
TreeViewItem treeViewItem, bool value)
{
treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
}
public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
DependencyProperty.RegisterAttached(
"IsBroughtIntoViewWhenSelected",
typeof(bool),
typeof(TreeViewItemBehavior),
new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
static void OnIsBroughtIntoViewWhenSelectedChanged(
DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
TreeViewItem item = depObj as TreeViewItem;
if (item == null)
return;
if (e.NewValue is bool == false)
return;
if ((bool)e.NewValue)
item.Selected += OnTreeViewItemSelected;
else
item.Selected -= OnTreeViewItemSelected;
}
static void OnTreeViewItemSelected(object sender, RoutedEventArgs e)
{
// Only react to the Selected event raised by the TreeViewItem
// whose IsSelected property was modified. Ignore all ancestors
// who are merely reporting that a descendant's Selected fired.
if (!Object.ReferenceEquals(sender, e.OriginalSource))
return;
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item != null)
item.BringIntoView();
}
#endregion // IsBroughtIntoViewWhenSelected
}
“Get”和“Set”前缀方法的作用是什么?添加此类,并在XAML中将TreeView.ItemControlsStyle Setter属性设置为静态依赖项属性,并将其值设置为“True”,效果与预期一样。如果我注释掉get和set前缀方法并重新编译,Intellisense会抱怨样式的属性不能为null,但编译仍然成功,并且
static void OnIsBroughtIntoViewWhenSelectedChanged(
DependencyObject depObj, DependencyPropertyChangedEventArgs e)
将被维护
如果两个方法名称都以任何方式更改,投诉仍然存在;如果只有一个方法被注释掉/修改,投诉将不存在
这是实现属性get和set的另一种方法吗?控件是否自动在XAML中查找“Get/Set+PropertyName”扩展方法?
当get和set扩展被禁用/注释掉时,如何/为什么能够工作?可以在指定的链接上找到类和xaml引用。我修改了指定的XAML属性ref,将其声明为x:Static,这是唯一的修改。谢谢你的洞察力 A查看文档: 引导您找到详细描述其创建的位置: 摘录: 如何创建附加属性 如果类严格定义附加属性以用于其他类型,则该类不必从DependencyObject派生。但是,如果遵循附加属性也是依赖属性的整个WPF模型,则确实需要从DependencyObject派生 通过声明类型为
DependencyProperty
的public
static
只读
字段,将附加属性定义为依赖属性。您可以使用RegisterAttached方法的返回值来定义此字段。字段名必须与附加的属性名(附加字符串属性)相匹配,以遵循已建立的WPF模式,将标识字段命名为它们所代表的属性。附加属性提供程序还必须提供静态
获取
属性名称和设置
属性名称方法作为附加属性的访问器;否则将导致财产系统无法使用您的附属财产
等等
它只是如何声明它们,这与正常的DependencyProperties语法不同