是否可以用附加属性替换此自定义WPF TextBox控件?
我有一个扩展WPF是否可以用附加属性替换此自定义WPF TextBox控件?,wpf,data-binding,resources,controltemplate,attached-properties,Wpf,Data Binding,Resources,Controltemplate,Attached Properties,我有一个扩展WPFTextBox控件的简单控件。基本思想是通过启用文本框在其内部显示自己的标签(当其为空时),来节省UI中的空间 我在其中声明了一个名为Label的dependencProperty,并将TextBox.Template属性设置为ControlTemplate。ControlTemplate是默认的Windows Aero XAML,在控件后面添加了一个TextBlock,用于显示TextBox.Text属性的值。其可见性属性与转换器绑定,以便在文本属性为空时可见。(有很多,而且
TextBox
控件的简单控件。基本思想是通过启用文本框
在其内部显示自己的标签(当其为空时),来节省UI中的空间
我在其中声明了一个名为Label
的dependencProperty
,并将TextBox.Template
属性设置为ControlTemplate
。ControlTemplate
是默认的Windows Aero XAML,在控件后面添加了一个TextBlock
,用于显示TextBox.Text
属性的值。其可见性
属性与转换器绑定,以便在文本
属性为空时可见。(有很多,而且大部分都很无聊,所以请原谅滚动条)
但是包含附加属性的TextBoxProperties
类不是静态的
更新>>>
感谢H.B.我发现我可以使用以下代码访问ControlTemplate
ControlTemplate labelControlTemplate =
(ControlTemplate)Application.Current.FindResource("LabelTextBoxTemplate");
您应该能够从以下位置访问应用程序.Resources
:应用程序.Current.Resources
绑定可能是这样的:
{绑定(附:TextBoxProperties.Label),
RelativeSource={RelativeSource AncestorType=TextBox}
如果包含属性的类是静态的,则bindng引擎将查看属性是否在文本框中设置,它不关心声明的类。它工作得很好!非常感谢。我永远不会停止惊讶于你能在WPF中创建什么而不创建用户控件!
Text="{Binding Path=(Attached:TextBoxProperties.Label),
Source={x:Static Attached:TextBoxProperties}, FallbackValue=''}"
ControlTemplate labelControlTemplate =
(ControlTemplate)Application.Current.FindResource("LabelTextBoxTemplate");