首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ErrorTemplate for PasswordBox和AttachedProperty

ErrorTemplate for PasswordBox和AttachedProperty
EN

Stack Overflow用户
提问于 2011-10-13 12:57:25
回答 1查看 1.8K关注 0票数 3

我知道,wpf中的passwordbox无法使用Validation.ErrorTemplate,无论如何,我必须向用户表明,有些地方出了问题。

我的Passwordbox有这样的绑定

代码语言:javascript
复制
 <PasswordBox Name="Password" local:PasswordHelper.Text="{Binding PasswordProp, Mode=TwoWay}" />

如果出现问题,是否可以获得与默认错误模板(红色边框)相同的样式?

这是我用于其他控件的ErrorTemplate

代码语言:javascript
复制
<Style x:Key="baseControlStyle">
    <Setter Property="Control.FontFamily" Value="Verdana" />
    <Setter Property="Control.FontSize" Value="12" />
    <Setter Property="ToolTipService.ShowOnDisabled" Value="True" />

    <Setter Property="Validation.ErrorTemplate" >
        <Setter.Value>
            <ControlTemplate>
                <DockPanel LastChildFill="True">
                    <Image x:Name="Bild" 
                           DockPanel.Dock="Right" 
                           Source="../Resources/Nein.ico" 
                           Margin="-5 0 0 0" 
                           MaxHeight="16" 
                           MaxWidth="16" 
                           VerticalAlignment="Center" 
                           ToolTip="{Binding ElementName=myControl, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                    </Image>
                    <Border BorderBrush="Red" BorderThickness="1" CornerRadius="2">
                        <AdornedElementPlaceholder x:Name="myControl" />
                    </Border>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="Control.ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-07-05 08:52:41

一种解决方案是将一个实际的TextBox放在PasswordBox下面,并将Text属性绑定到PasswordProp,并为TextBox提供ErrorTemplate:

代码语言:javascript
复制
<Grid>
    <TextBox Template="{x:Null}" Style="{StaticResource baseControlStyle}" Text="{Binding PasswordProp, Mode=TwoWay}" />    
    <PasswordBox Name="Password" local:PasswordHelper.Text="{Binding PasswordProp, Mode=TwoWay}" />
</Grid>

由于ErrorTemplate的控件将放在装饰器层上,所以您的错误模板将显示在-- PasswordBox事件的顶部--尽管TextBox位于PasswordBox下面。

还请注意,我已经将TextBox控件模板设置为null。因为它不应该是可见的,所以它不需要呈现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7754496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档