【问题标题】:WPF Style Override breaks Validation Error event propagationWPF 样式覆盖中断验证错误事件传播
【发布时间】:2010-03-26 20:41:14
【问题描述】:

我有一个覆盖 Window 的自定义控件:

public class Window : System.Windows.Window
{
    static Window()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(Window), new System.Windows.FrameworkPropertyMetadata(typeof(Window)));                        
    }
    ...
}

它也有一种风格:

<Style TargetType="{x:Type Controls:Window}" BasedOn="{StaticResource {x:Type Window}}">
    <Setter Property="WindowStyle"
            Value="None" />        
    <Setter Property="Padding"
            Value="5" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Controls:Window}">
 ...

不幸的是,这破坏了 Validation.ErrorEvent 对我的窗口内容的传播。也就是说,我的窗口可以很好地接收事件,但我不知道如何处理它来模仿标准窗口(或任何人)如何处理它。

如果验证控件放置在标准窗口中,它们就可以工作。如果我只是取出 OverrideMetadata 调用(将它们留在我的自定义窗口中),它们也可以工作。如果我离开 OverrideMetadata 调用,它们也可以工作,但不定义自定义 ControlTemplate。如果我将模板保留为默认模板,则里面的东西会正确接收它们的验证事件并使用它们的验证模板。

为什么会发生这种情况?如何使用自定义控件模板让处理这些验证错误事件的常用功能再次正常工作?

谢谢!

【问题讨论】:

    标签: wpf validation custom-controls routed-events


    【解决方案1】:

    以下 ControlTemplate for Window 对我有用:

    <ControlTemplate TargetType="{x:Type Window}">
                    <Grid Background="White">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <AdornerDecorator>
                            <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" />
                        </AdornerDecorator>
                    </Grid>
    </ControlTemplate>
    

    如果您删除 AdornerDecorator,验证错误将不可见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2011-11-18
      相关资源
      最近更新 更多