13

ここに、すべてのメニュー項目の下部にボタンを配置する WPF アプリケーションのコンテキスト メニューをカスタマイズする必要があるプロジェクトがあります。

ただし、XAML を使用してボタンを追加すると、コレクション内の別のアイテムとしてコンテキスト メニューに表示され、マウスオーバーによる強調表示が機能します。

コンテキスト メニューをグリッドのようなスタイルに調整して、その下のスタイルをカスタマイズできるようにしたいと考えています。

これをどのように達成できるか(できればXAMLで)、何か考えはありますか?

4

3 に答える 3

29

実際、XAML では非常に簡単です。コンテキスト メニューを表示する要素の下に定義するだけです。

        <Border>
            <Border.ContextMenu>
                <ContextMenu>
                    <ContextMenu.Template>
                        <ControlTemplate>
                            <Grid>
                                <!--Put anything you want in here.-->
                            </Grid>
                        </ControlTemplate>
                    </ContextMenu.Template>
                </ContextMenu>
            </Border.ContextMenu>
        </Border>
于 2013-04-18T23:34:39.070 に答える
7

アイテム内にボタンがあるメニュー アイテム スタイルでは、次のコードを使用できます。

注意 - に項目を追加するHeaderと同じままMenuItemですが、のみに追加するMenuItemと新しいものと見なされMenuItemます。

<ContextMenu>
    <ContextMenu.Items>
       <MenuItem>
          <MenuItem.Header>
             <StackPanel>
                <TextBlock Text="Item 1"/>
                <Button Content="Button 1" Margin="5"/>
             </StackPanel>
          </MenuItem.Header>
        </MenuItem>
        <MenuItem>
          <MenuItem.Header>
             <StackPanel>
                <TextBlock Text="Item 2"/>
                <Button Content="Button 2" Margin="5"/>
              </StackPanel>
           </MenuItem.Header>
          </MenuItem>
     </ContextMenu.Items>
 </ContextMenu>

これは結果になりContextMenuます:

ここに画像の説明を入力

そこからMenuItemorButtonなどのスタイルを設定できます。

それが役に立てば幸い!

于 2013-03-28T07:35:32.533 に答える
4

サンプルのスタイル/テンプレート (ここから)から始めてContextMenu、必要に応じて調整できます。

<Style TargetType="{x:Type ContextMenu}">
  <Setter Property="SnapsToDevicePixels" Value="True" />
  <Setter Property="OverridesDefaultStyle" Value="True" />
  <Setter Property="Grid.IsSharedSizeScope" Value="true" />
  <Setter Property="HasDropShadow" Value="True" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ContextMenu}">
        <Border x:Name="Border"
                Background="{StaticResource MenuPopupBrush}"
                BorderThickness="1">
          <Border.BorderBrush>
            <SolidColorBrush Color="{StaticResource BorderMediumColor}" />
          </Border.BorderBrush>
          <StackPanel IsItemsHost="True"
                      KeyboardNavigation.DirectionalNavigation="Cycle" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="HasDropShadow" Value="true">
            <Setter TargetName="Border" Property="Padding" Value="0,3,0,3" />
            <Setter TargetName="Border" Property="CornerRadius" Value="4" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
于 2016-06-20T20:10:38.673 に答える