为什么自定义窗口中的文本框验证无效?

时间:2013-09-13 08:51:35

标签: wpf validation custom-controls

我正在构建一个WPF应用程序(遵守MVVM设计模式),并且我已经应用于我的模型属性的验证工作得很好(代码部分),无论文本框在什么类型的窗口内。但是,关于文本框的默认Validation.ErrorTemplate,如果出现错误,它会给出一个红色轮廓...这只显示文本框与标准窗口一起使用时,如果它在我的内部则不显示CustomWindow或CustomDialog。这两个自定义控件都从Window类继承,并且只覆盖基本Window的美学功能。

要重新解决问题肯定在我的自定义窗口中的问题 - 我可以将CustomWindow中的xaml标记直接交换到Window,一切都很好。

所以,我在想的是我需要在自定义窗口的主题中专门定义一个Validation.ErrorTemplate,比如当你覆盖一个按钮模板时 - 如果你没有定义一个悬停样式它没有一个人!但我不知道如何去做和/或如果有可能,我无法通过谷歌找到任何帮助我的东西。

非常感谢任何建议/指导/帮助!

2 个答案:

答案 0 :(得分:0)

确实可行。以下面的示例(来自MSDN的链接页面):

<TextBox Name="textBox1" Width="50" FontSize="15"
         Validation.ErrorTemplate="{StaticResource validationTemplate}"
         Style="{StaticResource textBoxInError}"
         Grid.Row="1" Grid.Column="1" Margin="2">
    <TextBox.Text>
        <Binding Path="Age" Source="{StaticResource ods}"
             UpdateSourceTrigger="PropertyChanged" >
            <Binding.ValidationRules>
                <c:AgeRangeRule Min="21" Max="130"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

现在我们定义模板:

<ControlTemplate x:Key="validationTemplate">
    <DockPanel>
        <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
            <AdornedElementPlaceholder/>
    </DockPanel>
</ControlTemplate>

您可以在MSDN的Validation.ErrorTemplate Attached Property页面上找到更多信息。

答案 1 :(得分:0)

最后发现了另一个与我的问题相关的问题和一个有效的解决方案!

我在自定义窗口的控件模板中省略了adorner图层。我不想窃取解决方案,所以请在此处查看原始答案 - Error template not working when a ControlTemplate is applied to the window