2011-05-24 1 views
2

J'ai créé une fenêtre personnalisée remplaçant c'est DefaultStyleKey mais je perdre la FocusVisualStyle de tous les contrôles qui sont contenus à l'intérieur de la fenêtre. Même une personnalisée FocusVisualStyle ne fonctionne pas. Qu'est-ce que j'oublie ici?WPF - Fenêtre personnalisée avec la coutume DefaultStyleKey perd FocusVisualStyle

Voilà comment je passer outre la DefaultStyleKey dans le cteur statique de la classe CustomWindow:

DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomWindow), new FrameworkPropertyMetadata(typeof(CustomWindow))); 

Voici le style par défaut défini dans le generic.xaml:

<Style TargetType="{x:Type local:CustomWindow}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:CustomWindow}"> 
      <Border Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}"> 
       <ContentPresenter /> 
      </Border> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

La prochaine étape consiste à changer le type de base du MainWindow en CustomWindow et ajoutez deux boutons. Lorsque vous utilisez la touche Tab pour naviguer, aucun rectangle de mise en évidence n'apparaît.

Toute aide serait appréciée!

Répondre

3

Vous devez placer votre ContentPresenter dans un AdornerDecorator comme ceci:

<AdornerDecorator> 
    <ContentPresenter/> 
</AdornerDecorator> 

Il est le décorateur Adorner qui est rendu tous les rectangles de focus.

Lorsque les choses ne fonctionnent pas, vous pouvez regarder les modèles de contrôle par défaut. Ensuite, vous essayez leur modèle et votre modèle et comprendre pourquoi on travaille et l'autre ne fonctionne pas!

Je levai les yeux Window et il ressemble à ceci:

<Style x:Key="{x:Type Window}" 
     TargetType="{x:Type Window}"> 
    <Setter Property="Foreground" 
      Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
    <Setter Property="Background" 
      Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Window}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
        <AdornerDecorator> 
         <ContentPresenter/> 
        </AdornerDecorator> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Window.ResizeMode" 
       Value="CanResizeWithGrip"> 
      <Setter Property="Template" 
        Value="{StaticResource WindowTemplateKey}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Merci beaucoup Rick! Cela a fait l'affaire. –

Questions connexes