【问题标题】:How to expose xaml properties?如何公开 xaml 属性?
【发布时间】:2010-02-11 22:11:27
【问题描述】:

我创建了一个 ComboBox 子类并添加了我的功能。

现在我想公开 TextBox 的外部属性,例如:

<a:MyComboBox SpellCheck.IsEnabled="True" TextBox.SelectedText="{Binding X}" />

这可能吗,我可能没有选择错误的特定属性,但我想你明白我的意思。

这可能吗?
我必须单独创建所有属性吗?

【问题讨论】:

  • “文本框”是什么意思?您的子类的默认模板在某处使用了 TextBox,而您想绑定该 TextBox 的 SelectedText——对吗?

标签: wpf dependency-properties attached-properties attachedbehaviors dependencyobject


【解决方案1】:

这在 XAML 中是不可能的。 XAML 不允许您使用您所描述的属性路径语法来处理单个成员的子属性。 (对于某些可继承的属性,例如背景和字体大小,类似的可能的,但它使用继承机制——影响所有包含的控件——而不是处理特定的子元素,并且不会无论如何都适用于 TextBox.SelectedText。)

所以是的,您需要在 MyComboBox 类上声明自定义属性,以显示您需要从 MyComboBox 外部访问的 TextBox 的功能。从好的方面来说,这是一个很好的封装规则:请记住,未来的开发人员可能会将自定义模板应用到不包含 TextBox 的 MyComboBox(或者该成员未命名为 TextBox,或者名为 TextBox 的成员实际上是RichTextEditor 而不是纯文本框...)。显式属性确保 MyComboBox 清楚地定义此类模板需要尊重的行为和状态,并让模板决定如何实现,而不是模板的作者总是被约束以公开 TextBox。

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 2018-07-06
    • 2020-04-11
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2010-09-07
    相关资源
    最近更新 更多