0

我想在内置的左侧添加一个感叹号图像,TextBox并使其在任何时候可见TextBox Validation.HasError,否则将其隐藏。

如何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 中的徒劳努力。它在几个方面也可能是错误的,例如可能需要一个ValueConverterfor Visibility <--> Validation.HasError; 尽管有 TemplateBinding 等,但 TextBox 上的设置Width="120"似乎调整了 StackPanel 宽度而不是 TextBox 宽度。

4

1 回答 1

0

我建议调查Adorners。这些是特殊FrameworkElements的,在视觉元素之上的特殊装饰层中呈现,旨在为用户提供视觉提示。

上面的链接提供了 Custom 的摘要和Adorners示例Adorner

于 2013-04-30T14:50:53.217 回答