0

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

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。如果我将模板保留为默认模板,则里面的东西会正确接收它们的验证事件并使用它们的验证模板。

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

谢谢!

4

1 回答 1

0

Following ControlTemplate for Window works for me:

<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>

Validation errors will be invisible if you remove AdornerDecorator

于 2010-04-21T01:56:38.437 回答