鉴于此来源:external code base
这个静态类具体来说:
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 extentions被禁用/注释掉时,如何/为什么能够工作?可以在指定的链接中找到类和xaml引用。我通过将其声明为x:Static来修改指定的XAML属性ref,这是唯一的修改。感谢您的任何见解...
答案 0 :(得分:1)
查看文档:
引导您attached-properties-overview详细描述了它们的创建:
摘录:
如何创建附加属性
如果您的类严格定义附加属性以用于其他类型,则该类不必从DependencyObject派生。但是如果你遵循整体WPF模型,你需要从DependencyObject派生你的附加属性也是一个依赖属性。
通过声明类型为
public
的{{1}}static
readonly
字段,将附加属性定义为依赖项属性。您可以使用RegisterAttached方法的返回值来定义此字段。字段名称必须与附加的属性名称匹配,并附加字符串Property,以遵循已建立的WPF模式,即命名标识字段与它们表示的属性。 附加的媒体资源提供商还必须提供DependencyProperty
static
PropertyName 和Get
PropertyName 方法作为访问者附属物;如果不这样做,将导致财产系统无法使用您附加的财产。
等。
简单地说明如何声明它们与普通的DependencyProperties语法不同。