8
votes

Le séparateur de la barre d'outils WPF rétrécit à rien quand dans un stackpanel

Compte tenu de l'application WPF très simple

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


0 commentaires

3 Réponses :


16
votes

Le StackPanel modifie l'orientation du séparateur en quelque sorte. Notez que si vous indiquez explicitement le séparateur à 20 unités de large, le séparateur sera une ligne horizontale au lieu d'une ligne verticale. Cela fait partie de ce qui se passe.

Si vous appliquez un LayoutTransform au séparateur , il annule tout ce que le stackpanel fait. xxx

Je ne comprends pas le besoin d'un stackpanel , cependant.


2 commentaires

Je lie la visibilité de la StackPanel pour désactiver les groupes de fonctionnalités


En fait, le StackPanel ne change pas l'orientation du séparateur; Le séparateur par défaut en orientation horizontale. C'est la barre d'outils qui change l'orientation vers la verticale pour vous; Mais vous n'obtenez pas cet avantage si le séparateur n'est pas un enfant direct de la barre d'outils. Voir ma réponse ci-dessous.



2
votes

Les barres d'outils sont drôles de ce que vous mettez à l'intérieur. Ils sont drôles lorsque tous les éléments ne sont pas directs des enfants de la barre d'outils. Les éléments de regroupement sont la barre d'outils (groupe de barres d'outils), la barre d'outils et la barre d'outils (logique, pour effondrer le débordement). 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>


1 commentaires

Les panneaux d'outils ne sont-ils pas censés contenir les ménulseurs et le séparateur? Lorsque vous faites cela, le séparateur obtient toujours son orientation retournée. Si les panneaux d'outils ne sont pas censés contenir les ménulseurs, la liaison de la visibilité de la Toolbarpanel ne montrera pas / cacher les ménulseurs avec elle.



4
votes

Séparateurs par défaut à l'orientation horizontale.

Les séparateurs placés directement à l'intérieur d'une barre d'outils ont modifié leurs styles, car la barre d'outils remplace les styles par défaut de ses éléments. Les séparateurs placés ailleurs obtiennent le style par défaut d'un séparateur. Donc, vous aurez besoin de styler le séparateur vous-même si vous vissez de le garder à l'intérieur de StackPanel.

Cette discussion de codeProject inclut un code d'échantillon pour l'accomplir.

Référence: WPF Unleashed par Adam Nathan, page 117.


0 commentaires