代码之家  ›  专栏  ›  技术社区  ›  kenwarner

WPF工具栏分隔符在StackPanel中收缩为空

  •  7
  • kenwarner  · 技术社区  · 15 年前

    给出了非常简单的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>
    

    分隔符元素收缩为空。如果我把分隔符放在StackPanel开始之前,它就会出现。为什么会这样?是否有一个样式设置可以应用于某个地方以避免这种情况?

    3 回复  |  直到 14 年前
        1
  •  15
  •   Joel B Fant    15 年前

    这个 StackPanel 正在更改 Separator 不知何故。注意,如果你明确地告诉 分离器 宽度为20单位, 分离器 将是水平线而不是垂直线。这是事情的一部分。

    如果你申请 LayoutTransform 分离器 它会破坏一切 堆栈面板 正在做。

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

    我不明白 堆栈面板 但是。

        2
  •  4
  •   stone    14 年前

    分隔符默认为水平方向。

    直接放置在工具栏中的分隔符的样式会发生更改,因为工具栏会覆盖其项的默认样式。放置在别处的分隔符获取分隔符的默认样式。因此,如果您想将分隔符保存在stackpanel中,则需要自己设置分隔符的样式。

    This CodeProject discussion 包括完成此操作的示例代码。

    参考文献: WPF释放 亚当·内森,第117页。

        3
  •  2
  •   AndyM    15 年前

    工具栏对你放进去的东西很有趣。当所有元素都不是工具栏的直接子元素时,它们会变得很有趣。分组元素是toolbartray(工具栏组)、toolbar和toolbarpanel(逻辑上,用于折叠溢出)。这就是WPF想要看到的:

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