我创建了一个 ComboBox 子类并添加了我的功能。
现在我想公开 TextBox 的外部属性,例如:
<a:MyComboBox SpellCheck.IsEnabled="True" TextBox.SelectedText="{Binding X}" />
这可能吗,我可能没有选择错误的特定属性,但我想你明白我的意思。
这可能吗?
我必须单独创建所有属性吗?
我创建了一个 ComboBox 子类并添加了我的功能。
现在我想公开 TextBox 的外部属性,例如:
<a:MyComboBox SpellCheck.IsEnabled="True" TextBox.SelectedText="{Binding X}" />
这可能吗,我可能没有选择错误的特定属性,但我想你明白我的意思。
这可能吗?
我必须单独创建所有属性吗?
这在 XAML 中是不可能的。XAML 不允许您使用您所描述的属性路径语法来处理各个成员的子属性。(对于某些可继承的属性,例如背景和字体大小,类似的东西是可能的,但它使用继承机制——影响所有包含的控件——而不是处理特定的子元素,并且无论如何都不适用于 TextBox.SelectedText。 )
所以是的,您需要在 MyComboBox 类上声明自定义属性,以显示您需要从 MyComboBox 外部访问的 TextBox 的功能。从好的方面来说,这是一个很好的封装规则:请记住,未来的开发人员可能会将自定义模板应用到不包含 TextBox 的 MyComboBox(或者该成员未命名为 TextBox,或者名为 TextBox 的成员实际上是RichTextEditor 而不是纯文本框...)。显式属性确保 MyComboBox 清楚地定义此类模板需要尊重的行为和状态,并让模板决定如何实现它,而不是总是限制模板的作者公开一个 TextBox。