如何制作只有特殊类型的 ItemsControl?
How to make an ItemsControl that has only the special type?
我的英语水平很差,因为我的母语不是英语。
希望您能理解。
我想构造一个只能接收特殊类型的控件。
我正在考虑构建它派生 ItemsControl。
首先,我试图构建它派生面板,但我认为这种方式不适合这个主题,所以我尝试使用 ItemControl。
无论如何,我的问题是 ItemsControl 的 ItemCollection 可以具有所有类型,但我希望我尝试构建的控件只有一种特殊类型。
例如,我期望的代码构造如下。
(我尝试构建的控件名称假定为 "DockManager"。)
("DockManager" 可以有的特殊类型的名称,假定 "DockLayout" 和 "DocumentLayout"。)
一个成功的例子。
<DockManager>
<DockLayout Header="example" Content="{Binding}" DockManager.Dock="Top"/>
<DockLayout Header="example2" Content="{Binding}" DockManager.Dock="Bottom"/>
<DocumentLayout Header="example2" Content="{Binding}"/>
</DockManager>
失败示例
<DockManager>
<Grid/> <-- Error : DockManager can't has the Grid control.
<TextBox/> <-- Error : DockManager can't has the TextBox control.
</DockManager>
我能否在ItemsControl 的基础上实现上述目标?
我不愿意依附于 ItemsControl。
如果你有更好的方法可以达到上述目标,能不能教教我一下?
感谢阅读
Could I reach the above goal in the base on ItemsControl
?
简答:否。
一个 ItemsControl
有一个 ItemsSource
属性 可以设置为任何 IEnumerable
并且你不能通过创建一个新的 API 来改变这个 API class 派生自它。
因此,如果您想要一个仅适用于特定类型项目的控件,您基本上必须从头开始创建您自己的自定义控件。您可以查看 source code of the ItemsControl
并从那里开始。
我的英语水平很差,因为我的母语不是英语。 希望您能理解。
我想构造一个只能接收特殊类型的控件。 我正在考虑构建它派生 ItemsControl。 首先,我试图构建它派生面板,但我认为这种方式不适合这个主题,所以我尝试使用 ItemControl。
无论如何,我的问题是 ItemsControl 的 ItemCollection 可以具有所有类型,但我希望我尝试构建的控件只有一种特殊类型。
例如,我期望的代码构造如下。 (我尝试构建的控件名称假定为 "DockManager"。) ("DockManager" 可以有的特殊类型的名称,假定 "DockLayout" 和 "DocumentLayout"。)
一个成功的例子。
<DockManager>
<DockLayout Header="example" Content="{Binding}" DockManager.Dock="Top"/>
<DockLayout Header="example2" Content="{Binding}" DockManager.Dock="Bottom"/>
<DocumentLayout Header="example2" Content="{Binding}"/>
</DockManager>
失败示例
<DockManager>
<Grid/> <-- Error : DockManager can't has the Grid control.
<TextBox/> <-- Error : DockManager can't has the TextBox control.
</DockManager>
我能否在ItemsControl 的基础上实现上述目标? 我不愿意依附于 ItemsControl。 如果你有更好的方法可以达到上述目标,能不能教教我一下?
感谢阅读
Could I reach the above goal in the base on
ItemsControl
?
简答:否。
一个 ItemsControl
有一个 ItemsSource
属性 可以设置为任何 IEnumerable
并且你不能通过创建一个新的 API 来改变这个 API class 派生自它。
因此,如果您想要一个仅适用于特定类型项目的控件,您基本上必须从头开始创建您自己的自定义控件。您可以查看 source code of the ItemsControl
并从那里开始。