1

如果您查看SelectorTabItem课程,他们显然都拥有IsSelectedProperty.

static Selector()
{
    ...
    IsSelectedProperty = DependencyProperty.RegisterAttached("IsSelected", typeof(bool), typeof(Selector), ...);
    ...
}

static TabItem()
{
    IsSelectedProperty = Selector.IsSelectedProperty.AddOwner(typeof(TabItem), ...);
    ...
}

所以我想我的问题是......因为 Tabitem 包含实际的 propertychanged 逻辑,所以 IsSelectedProperty 甚至驻留在Selector类中的意义何在?

4

2 回答 2

2

在这种特定情况下,SelectorIsSelectedDP,因为有许多从它派生的控件,它们的项目可以选择(ComboBoxListBoxListViewTabControlDataGrid)。他们都需要能够用 标记项目IsSelected,因此 DP 在他们的公共基类中声明。就像蒂姆说的,干。

TabItem将自身添加为所有者的另一个原因是,在Selector类中,IsSelected它是一个附加属性,因为您可以将任何东西作为Selector. 附加的属性是非常移动的。

但是,TabItem将自身添加为所有者,这样它就不是TabItem. 它还注册了一个回调方法,以便在值更改时调用,以便在选择或取消选择时可以做一些事情。

是的,在 Intellisense 中输入和查看比“但是我到底要如何选择一个?”更容易输入<TabItem和查看。IsSelected并且必须四处寻找,发现您需要使用其他类的附加属性。

于 2011-05-19T13:52:59.657 回答
1

它基本上只是 DRY(不要重复自己)的一个实例。这是 MSDN 论坛上有关该主题的主题:

DependencyProperty.AddOwner - 有什么意义

于 2011-05-19T02:08:09.407 回答