1

動的な ItemsSource を受け取るメニューがあります。アイテムの数とその長さは、その時々によって異なります。

<Menu ItemsSource="{loc:CustomBinding CurrentMenuItems}" />

メニューの向きは水平です。これにより、メニューがオーバーフローすることがあります。

メニュー項目テンプレート:

<ControlTemplate TargetType="{x:Type MenuItem}">
    <TextBlock Text="{loc:CustomBinding Title}"                                
               MaxWidth="200"
               TextTrimming="CharacterEllipsis"/>   
</ControlTemplate>

項目が4つ以上になると、メニューが画面左側からはみ出してしまいます(作業場からの写真アップができず申し訳ありません)。

  1. WPF メニューに組み込みのオーバーフロー オプションはありますか?

  2. メニュー自体からメニュー項目のオーバーフローを制御するオプションはありますか? ItemsMaxLength計算フィールドにバインドできる線に沿ったものはありますか?

4

1 に答える 1

0

右端のメニュー項目が画面に収まらない場合にどうしたいのかわかりません。それは...ですか?:

  • それらを次の行に折り返す
  • それらを完全に切り取る
  • それらを部分的に切り取る
  • それらをオーバーフロードロップダウンに入れますか?
  • 楕円またはその他の「詳細」インジケータを表示しますか?

aのデフォルトItemsPanelテンプレートは ... をMenu使用WrapPanelし、次の行に折り返す必要があります (メニューの高さを設定していない場合、またはメニューが目的の高さを許可していないコンテナー内にある場合を除きます)。

アイテムのレイアウト方法を変更するために使用される ItemsPanel を変更できます。

以下の XAML の例では、メニューを表示する 4 つの方法を示しています。これを Kaxaml 内で使用して、さまざまな動作を確認できます...ウィンドウのサイズを小さな幅に変更して、十分な水平スペースがない場合に何が起こるかを確認します。

  1. 元のメニュー スタイル...収まらないメニュー項目をラップします
  2. 収まらないメニュー項目を完全にトリミングするメニュー
  3. 収まらないメニュー項目を部分的にトリミングするメニュー
  4. ツールバーを使用するメニュー...収まらない項目はすべてオーバーフロー パネルに移動します
    (この例は完全ではないことに注意してください...マウス/キーボードを使用した標準のメニュー選択動作に厳密に従っているわけではありません。アイテムごとに個別のメニューを使用しています...スタイルが少しずれています...そしてツールバーのグリッパーが表示されます....もっと作業が必要です)。

4 が必要なものに最も近い場合は、動作またはツールバーをオーバーフロー パネルと組み合わせる必要があります...メニューの動作と、メニュー項目間の追跡/ナビゲーションです。

メニューまたはツールバーを創造的に再テンプレート化するか、独自のカスタム コントロールを作成することで、それを実現できる場合があります。

 <Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480">
    <StackPanel Orientation="Vertical">
        <Menu>
            <MenuItem Header="_File">
                <MenuItem Header="_Exit"/>
            </MenuItem>
            <MenuItem Header="_Edit"/>
            <MenuItem Header="_Window"/>
        </Menu>
        <Menu>
            <Menu.ItemsPanel>
                <ItemsPanelTemplate>
                <ToolBarPanel IsItemsHost="True" Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </Menu.ItemsPanel>
            <MenuItem Header="_File">
                <MenuItem Header="_Exit"/>
            </MenuItem>
            <MenuItem Header="_Edit"/>
            <MenuItem Header="_Window"/>
        </Menu>
        <Menu>
            <Menu.ItemsPanel>
                <ItemsPanelTemplate>
                <StackPanel IsItemsHost="True" Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </Menu.ItemsPanel>
            <MenuItem Header="_File">
                <MenuItem Header="_Exit"/>
            </MenuItem>
            <MenuItem Header="_Edit"/>
            <MenuItem Header="_Window"/>
        </Menu>
        <ToolBar>
        <ToolBar.Resources>
        <Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}">
  <Style.Triggers>
    <Trigger Property="Role" Value="TopLevelHeader">
      <Setter Property="Template"
              Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}"/>
    </Trigger>
  </Style.Triggers> 
</Style>
        </ToolBar.Resources>
          <Menu>
            <MenuItem Header="_File">
                <MenuItem Header="_Exit"/>
            </MenuItem>
          </Menu>
          <Menu>
            <MenuItem Header="_Edit"/>
          </Menu>
          <Menu>
            <MenuItem Header="_Window"/>
          </Menu>
        </ToolBar>
    </StackPanel>
</Window>
于 2012-08-26T18:50:38.023 に答える