Pergunta

Dada a muito simples WPF aplicativo

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

O elemento separador diminui para nada. Se eu colocar o Separador pouco antes da StackPanel começa, ele vai aparecer. Por que isso acontece? Existe uma configuração de estilo que pode ser aplicado em algum lugar para evitar isso?

Foi útil?

Solução

O StackPanel está mudando a orientação do Separator de alguma forma. Note que se você diga explicitamente o Separator ser 20 unidades de largura, o Separator será uma linha horizontal, em vez de uma linha vertical. Isso é parte do que está acontecendo.

Se você aplicar um LayoutTransform ao Separator, desfaz qualquer que seja o StackPanel está fazendo.

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

Eu não entendo a necessidade de um StackPanel, no entanto.

Outras dicas

Separadores padrão para orientação horizontal.

Separadores colocados diretamente dentro de uma barra de ferramentas têm seus estilos mudou, porque a barra de ferramentas substitui os estilos padrão de seus itens. Separadores colocados em outros lugares obter o estilo padrão de um separador. Então você vai precisar para o estilo do separador de si mesmo se você vwant para mantê-lo dentro do StackPanel.

esta discussão CodeProject inclui código de exemplo para fazer isso.

Referência:. WPF desencadeada por Adam Nathan, página 117

Barras de Ferramentas são engraçados sobre o que você colocar dentro. Começam engraçado quando todos os elementos não são filhos diretos da barra de ferramentas. Os elementos de agrupamento são ToolBarTray (grupo de barras de ferramentas), barra de ferramentas, e ToolBarPanel (lógico, para colapsar de transbordo). Isto é o que WPF quer 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top