Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 用于将UIElements添加到原始控件的ControlTemplate_Wpf_Controltemplate_Uielement_Templatebinding - Fatal编程技术网

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没有调整大小以适应。我想我得再看一遍。