Переопределение перерывов в стиле WPF Распространение события ошибки валидации - PullRequest
0 голосов
/ 26 марта 2010

У меня есть пользовательский элемент управления, который переопределяет 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. Если я оставлю шаблон как шаблон по умолчанию, вещи внутри него получат свои события проверки и будут использовать их шаблоны проверки.

Почему это происходит, и как я могу получить стандартную функциональность для обработки этих событий ошибок валидации снова, используя пользовательский шаблон элемента управления?

Спасибо!

1 Ответ

0 голосов
/ 21 апреля 2010

У меня работает следующий ControlTemplate для 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

...