Pregunta

Dada la aplicación WPF muy 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>

El elemento separador se reduce a nada. Si pongo el separador justo antes de que comience el StackPanel, se mostrará. ¿Por qué pasó esto? ¿Hay un ajuste de estilo que puede ser aplicado en alguna parte para evitar esto?

¿Fue útil?

Solución

El StackPanel está cambiando la orientación de la Separator de alguna manera. Tenga en cuenta que si usted le dice explícitamente el Separator a ser de 20 unidades de ancho, la Separator será una línea horizontal en lugar de una línea vertical. Eso es parte de lo que está pasando.

Si se aplica un LayoutTransform a la Separator, se deshace cualquiera que sea el StackPanel está haciendo.

<Separator>
    <Separator.LayoutTransform>
        <RotateTransform
            Angle="90" />
    </Separator.LayoutTransform>
</Separator>

No entiendo la necesidad de un StackPanel, sin embargo.

Otros consejos

default Separadores para la orientación horizontal.

Los separadores colocados directamente en el interior de una barra de herramientas tienen sus estilos cambian, porque la barra anula los estilos por defecto de sus artículos. Separadores colocados en otros lugares reciben el estilo por defecto de un separador. Por lo que tendrá el estilo de separador sí mismo si vwant para mantenerlo dentro del StackPanel.

esta discusión CodeProject incluye código de ejemplo para lograr esto.

Referencia:. WPF desatada por Adam Nathan, página 117

Barras de herramientas son más gracioso de lo que se pone en el interior. Consiguen divertido cuando todos los elementos no son hijos directos de la barra de herramientas. Los elementos de agrupación son ToolBarTray (grupo de barras de herramientas), barra de herramientas y ToolBarPanel (lógico, para el colapso de desbordamiento). Esto es lo que WPF quiere ver:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top