2010-10-26 37 views
7

J'ai remarqué que la marge ou la hauteur du séparateur par défaut tel qu'il est stylisé dans les menus dans WPF semble être légèrement plus grande que certaines autres applications telles que Visual Studio 2010. Je sais que ces séparateurs peuvent être reformulés par appliquer un nouveau style avec un ControlTemplate personnalisé mais comme toujours, je cherche un moyen de changer cela sans avoir à redéfinir manuellement la composition du contrôle.Un moyen de rendre un séparateur dans un menu WPF plus étroit?

Si ce que je demande n'est pas possible, j'accepterai une réponse si quelqu'un peut fournir une explication exhaustive et faisant autorité. Je tiens également à souligner que je ne suis pas intéressé par une conférence sur la façon de redéfinir le ControlTemplate car je le traite en dernier recours et je suis déjà conscient de la manière d'y parvenir.

+0

Avez-vous déjà trouvé comment faire? Cela m'agace aussi. –

+0

Pas encore, je serai sûr de mettre à jour mon post si je fais cependant. – jpierson

Répondre

12

Le style pour le aero.normalcolor MenuItem Separator ressemble à ceci:

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" 
     TargetType="{x:Type Separator}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Separator}"> 
       <Grid SnapsToDevicePixels="true" Margin="0,6,0,4"> 
        <Rectangle Height="1" 
           Margin="30,0,1,1" 
           Fill="#E0E0E0"/> 
        <Rectangle Height="1" 
           Margin="30,1,1,0" 
           Fill="White"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Vous devez copier ce style à votre app.xaml et changer le Margin="0,6,0,4" pour répondre à vos préférences. J'utilise toujours la marge négative: <Separator Margin="0,-4" />

+0

C'est probablement la solution la plus acceptable et la façon la plus standard de changer l'apparence de n'importe quel contrôle au-delà des leviers offerts par les propriétés exposées, donc je l'accepte. Dans mon cas, j'intègre des contrôles WPF dans une application WinForms en utilisant ElementHost, donc le concept d'app.xaml ne s'applique pas. Aussi, comme une autre note, une façon que j'ai trouvé autour de cela sans modifier le modèle de contrôle sous-jacent est essentiellement de définir des marges négatives sur le contrôle Separator lui-même ou à travers un style. – jpierson