Wpf 用于将UIElements添加到原始控件的ControlTemplate
我想在内置的Wpf 用于将UIElements添加到原始控件的ControlTemplate,wpf,controltemplate,uielement,templatebinding,Wpf,Controltemplate,Uielement,Templatebinding,我想在内置的TextBox左侧添加感叹号图像,并在TextBox验证时使其可见。HasError附加属性为true,否则将其隐藏 如何使用ControlTemplate添加图像,而不必重新绑定所有TextBox属性 <StackPanel> <StackPanel.Resources> <ControlTemplate x:Key="TextBoxWithIndicator" TargetType="{x:Type TextBox}">
TextBox
左侧添加感叹号图像,并在TextBox
验证时使其可见。HasError
附加属性为true,否则将其隐藏
如何使用ControlTemplate
添加图像,而不必重新绑定所有TextBox
属性
<StackPanel>
<StackPanel.Resources>
<ControlTemplate x:Key="TextBoxWithIndicator" TargetType="{x:Type TextBox}">
<StackPanel Orientation="Horizontal">
<!-- Re-bind {Binding Path=Property}, including some that I may miss -->
<TextBox Text="{TemplateBinding Text}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>
<Image Source="resources/exclaim.png" Visibility="{TemplateBinding Validation.HasError}"/>
</StackPanel>
</ControlTemplate>
</StackPanel.Resources>
<TextBox Template="{StaticResource TextBoxWithIndicator}" Width="120">Happy Go Lucky</TextBox>
</StackPanel>
走运
注意前面的代码块代表了我迄今为止在WPF中的徒劳努力。它在几个方面也可能是错误的,例如,可能需要一个
值转换器来进行可见性验证。HasError
;在TextBox上设置Width=“120”
似乎可以调整StackPanel的宽度,而不是TextBox的宽度,尽管有模板绑定等功能。我建议查看一下。这些是特殊的框架元素
,呈现在视觉元素顶部的特殊装饰层中,旨在向用户提供视觉提示
上面的链接提供了装饰器的摘要
以及自定义装饰器的示例您是否考虑过使用控制模板而不是控制模板
?另外,请记住,如果您只是在讨论自定义文本框
出现验证错误时的外观,有一个专门用于此目的的Validation.ErrorTemplate
。是一个带有代码的答案,用于创建一个,您可以自定义。@BrianS抱歉,因为我是WPF新手,我不知道ErrorTemplate和Adorner。实际上,我想要一个即使在错误验证上下文之外也适用的答案。我想装饰应该是我要找的。如果你能把它写下来作为答案,我会记下来的。不需要道歉。我们都是WPF的新手,最大的挑战之一就是学习所有不同的可能性。很高兴我能为你指出正确的方向,祝你好运!谢谢不幸的是,我的问题并没有到此为止。装饰物被放置在另一层,因此我的StackPanel没有调整大小以适应。我想我得再看一遍。