1

分割ボタンの下にドロップダウン メニューを表示しようとしています。これらの menuItems の一部には、サブメニュー項目が必要です。例が必要な場合は、Firefox のブックマーク ボタン (右上) をクリックしてください。

メニューは常に横向きなので使えません。だから私はスタックパネルに行きました:

<Window x:Class="WpfApplication3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    Title="MainWindow" Height="350" Width="525">
<Grid>


    <xctk:SplitButton Content="SplitButton" BorderThickness="1" BorderBrush="Black" Margin="0,0,408,290">
        <xctk:SplitButton.DropDownContent>
            <StackPanel Width="161" HorizontalAlignment="Left">


                <MenuItem Header="MenuItem1" HorizontalAlignment="Left" Width="517">
                    <MenuItem.Items>
                        <MenuItem Header="submenuItem1"/>
                        <MenuItem Header="submenuItem2"/>                            
                    </MenuItem.Items>

                </MenuItem>
                <MenuItem Header="MenuItem2"/>
                <MenuItem Header="MenuItem3"/>

            </StackPanel>                   
        </xctk:SplitButton.DropDownContent>

    </xctk:SplitButton>
</Grid>

ここでの問題は、サブ メニュー項目が表示されないことです。横に小さな矢印すらありません。SplitButton なしでこれを行うことができます。stackpanel とその中のすべてをそのままにしておくと、同じ問題が発生します。親メニュー項目を独自のタグに入れようとしましたが、サブメニュー項目を親の右側に表示したいです (Firefox の例のように: Firefox ウィンドウが最大化されておらず、許可されていると仮定します)アイテムが表示されるのに十分な画面スペース)。

4

1 に答える 1

1

コントロールの使用方法MenuItemが間違っています。Menuコントロールまたは別の内部でホストされることを意図していますMenuItem

あなたの問題の解決策については、2つあります。1 つ目は、メニュー項目をホストするために を再利用するカスタム コントロールを作成するContextMenuことです。次のように記述します。

    <m:SplitButton Content="Split Button" Placement="Bottom">
        <MenuItem Header="MenuItem 1"/> 
        <MenuItem Header="MenuItem 2"> 
             <MenuItem Header="MenuItem 1"/> 
             <MenuItem Header="MenuItem 2"/> 
        </MenuItem>
    </m:SplitButton

http://www.codeproject.com/Articles/20612/A-WPF-SplitButton

2 番目のアプローチは、Menu内部でコントロールをホストし、DropDownContentすべてを再スタイルすることです。多くの xaml マークアップが存在します。

コントロールはMenu簡単にスタイルを変更できます。次のマークアップを使用して、メニュー項目が水平ではなく垂直に表示されるようにするだけです。

    <Style TargetType="Menu">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Vertical" IsItemsHost="True" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
    </Style>

最も難しいのは のスタイリングです。MenuItemsそれらはRoleプロパティに基づいてスタイリングされます。可能な値は次の 4 つです。

  1. MenuTopLevelHeader :サブメニュー項目を持つ の直接の子。
  2. MenuTopLevelItem :サブメニュー項目なしの直接の子。
  3. SubmenuHeader :MenuItemサブメニュー項目を持つ の直接の子。
  4. MenuItemSubmenuItem :サブメニュー項目なしの直接の子。

よろしく

于 2014-01-28T21:10:52.967 に答える