8

非常に単純な 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>

Separator 要素は縮小されて何もなくなります。StackPanel が始まる直前に Separator を配置すると、表示されます。なぜこれが起こるのですか?これを回避するためにどこかに適用できるスタイル設定はありますか?

4

3 に答える 3

16

はなんとなくStackPanel向きを変えています。に 20 単位の幅を明示的に指定すると、 は垂直線ではなく水平線になることにSeparator注意してください。それは起こっていることの一部です。SeparatorSeparator

に を適用するLayoutTransformと、 が行っているSeparatorことはすべて取り消されStackPanelます。

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

ただし、の必要性がわかりませんStackPanel

于 2009-08-13T20:40:06.980 に答える
4

セパレーターのデフォルトは水平方向です。

Toolbar はその項目のデフォルト スタイルをオーバーライドするため、ToolBar 内に直接配置されたセパレータのスタイルは変更されます。他の場所に配置されたセパレーターは、セパレーターのデフォルト スタイルを取得します。したがって、セパレーターを StackPanel 内に保持したい場合は、自分でセパレーターのスタイルを設定する必要があります。

この CodeProject の説明には、これを実現するためのサンプル コードが含まれています。

参照: Adam Nathan によって解き放たれた WPF 、117 ページ。

于 2010-05-12T22:32:29.113 に答える
2

ツールバーは、中に入れるものについて面白いです。すべての要素が ToolBar の直接の子ではない場合、それらはおかしくなります。グループ化要素は、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>
于 2009-08-13T20:55:17.270 に答える