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语法不同