WPF ToolBar séparateur se réduit à rien quand à l'intérieur d'un StackPanel
-
16-09-2019 - |
Question
Compte tenu de la très simple application WPF
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="800">
<Grid>
<ToolBar Height="50" >
<MenuItem Header="Test1" />
<MenuItem Header="Test2" />
<StackPanel Orientation="Horizontal">
<Separator />
<MenuItem Header="Test3" />
<MenuItem Header="Test4" />
<MenuItem Header="Test5" />
</StackPanel>
</ToolBar>
</Grid>
</Window>
L'élément de séparation se réduit à rien. Si je mets le séparateur juste avant le StackPanel commence, il apparaîtra. Pourquoi cela arrive-t-il? Y at-il un cadre de style qui peut être quelque part appliqué pour éviter cela?
La solution
Le StackPanel
est en train de changer l'orientation de la Separator
en quelque sorte. Notez que si vous dites explicitement le Separator
être 20 unités de largeur, le Separator
sera une ligne horizontale au lieu d'une ligne verticale. Cela fait partie de ce qui se passe.
Si vous appliquez un LayoutTransform
au Separator
, il quel que soit le StackPanel
défait fait.
<Separator>
<Separator.LayoutTransform>
<RotateTransform
Angle="90" />
</Separator.LayoutTransform>
</Separator>
Je ne comprends pas la nécessité d'une StackPanel
, cependant.
Autres conseils
Separators par défaut à l'orientation horizontale.
placés directement à l'intérieur Separators un ToolBar ont leurs styles ont changé, parce que la barre d'outils remplace les styles par défaut de ses éléments. Placés ailleurs obtenir des séparateurs le style par défaut d'un séparateur. Donc, vous devez vous-même le style de séparation si vous vwant de le garder à l'intérieur du StackPanel.
cette discussion CodeProject comprend des exemples de code pour y parvenir.
Référence:. WPF Unleashed par Adam Nathan, la page 117
Barres d'outils sont drôles à ce que vous mettez à l'intérieur. Ils obtiennent drôle quand tous les éléments ne sont pas les enfants directs du ToolBar. Les éléments de groupement sont ToolBarTray (groupe de barres d'outils), barre d'outils et ToolBarPanel (logique, en cas de débordement effondrement). C'est ce que WPF veut voir:
<Grid>
<ToolBarTray>
<ToolBar Height="Auto">
<ToolBarPanel Orientation="Horizontal" ToolBar.OverflowMode="AsNeeded"/>
<MenuItem Header="Test1" />
<Separator/>
<MenuItem Header="Test2" />
</ToolBar>
<ToolBar Height="Auto">
<ToolBarPanel ToolBar.OverflowMode="Never"/>
<MenuItem Header="Test3" />
<MenuItem Header="Test4" />
<Separator/>
<MenuItem Header="Test5" />
<ToolBarPanel ToolBar.OverflowMode="AsNeeded"/>
<MenuItem Header="Test6" />
<MenuItem Header="Test7" />
</ToolBar>
</ToolBarTray>
</Grid>