2010-03-26 5 views
0

J'ai un contrôle personnalisé qui remplace la fenêtre:WPF style casse Override Validation de la propagation des événements d'erreur

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

Il a aussi un style:

<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}"> 
... 

Malheureusement, ce casse la propagation de la validation. ErrorEvent pour le contenu de ma fenêtre. Autrement dit, ma fenêtre peut très bien recevoir l'événement, mais je ne sais pas quoi en faire pour imiter la façon dont une fenêtre standard (ou n'importe qui) s'en occupe.

Si les contrôles de validation sont placés dans une fenêtre standard, ils fonctionnent. Ils fonctionnent également si je supprime l'appel OverrideMetadata (en les laissant dans ma fenêtre personnalisée). Ils fonctionnent également si je laisse l'appel OverrideMetadata, mais ne définissez pas un ControlTemplate personnalisé. Si je laisse le modèle par défaut, les éléments internes reçoivent correctement leurs événements de validation et utilisent leurs modèles de validation.

Pourquoi cela se produit-il, et comment puis-je faire fonctionner à nouveau la fonctionnalité stock pour gérer ces événements d'erreur de validation, en utilisant un modèle de contrôle personnalisé?

Merci!

Répondre

0

Après ControlTemplate pour Windows fonctionne pour moi:

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

erreurs de validation seront invisibles si vous supprimez AdornerDecorator