0

私は MVVM で作成されたメニューを持っていますが、ここに示すように私の Menuitem は大きいです http://i49.tinypic.com/wi1vk3.png

したがって、メインウィンドウには、メニューのリストにバインドするメニューがあります。

私からしてみれば

 <Menu VerticalAlignment="Top">
       <MenuItem Header="File" ItemsSource="{Binding MenuList}" />
    </Menu>

そして私のViewModelで

List<MenuViewModelBase> _menuList = new List<MenuViewModelBase>();
_menuList.Add(new MenuViewModel("New", NewCommand));
_menuList.Add(new MenuViewModel("Open", OpenCommand));
_menuList.Add(new MenuViewModel("Save", SaveCommand));
_menuList.Add(new MenuViewModel("Exit", ExitCommand));

私のMenuViewは

<MenuItem>
  <MenuItem.Resources>
    <Style TargetType="MenuItem">
      <Setter Property="Header" Value="{Binding Name}" />
      <Setter Property="Command" Value="{Binding ActionCommand}" />
    </Style>
  </MenuItem.Resources>
</MenuItem>

コンテンツに合わせてメニュー項目のサイズを変更する方法を教えてもらえますか?

4

1 に答える 1

0

あなたが見ているのは、デフォルトのテンプレートが InputGestureText のために確保しているスペースだと思います。その領域を削除したい場合は、メニュー項目に独自のテンプレートを実装するのが最善の策だと思います。デフォルトのテンプレートを出発点として使用すると、探しているものを取得するために簡単に変更できます。

アップデート:

上記のリンクから MenuItem スタイルをコピーしてプロジェクトに追加した例を含めました。次に、SubMenuHeaderTemplate から Icon 領域と InputGesture 領域を削除しました。一般に、変更したい既定の動作が見つかった場合は、スタイルを介して変更を試みることができます。それが機能しない場合は、Microsoft が提供するものをベースとして使用して既定のテンプレートをオーバーライドできます。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow">
<Window.Resources>

    <Color x:Key="DisabledForegroundColor">#FF888888</Color>
    <Color x:Key="ControlLightColor">White</Color>
    <Color x:Key="ControlMediumColor">#FF7381F9</Color>
    <Color x:Key="ControlMouseOverColor">#FF3843C4</Color>

    <!--Border colors-->
    <Color x:Key="BorderMediumColor">#FF888888</Color>

    <LinearGradientBrush x:Key="MenuPopupBrush" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0" />
        <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="0.5" />
        <GradientStop Color="{DynamicResource ControlLightColor}" Offset="1" />
    </LinearGradientBrush>

    <!-- TopLevelHeader -->
    <ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
        <Border x:Name="Border">
            <Grid>
                <ContentPresenter Margin="6,3,6,3" ContentSource="Header" RecognizesAccessKey="True" />
                <Popup x:Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsSubmenuOpen}"
                         AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
                    <Border x:Name="SubmenuBorder" SnapsToDevicePixels="True" BorderThickness="1"
                            Background="{DynamicResource MenuPopupBrush}">
                        <Border.BorderBrush>
                            <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
                        </Border.BorderBrush>
                        <ScrollViewer CanContentScroll="True" Style="{StaticResource MenuScrollViewer}">
                            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" />
                        </ScrollViewer>
                    </Border>
                </Popup>
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsSuspendingPopupAnimation" Value="true">
                <Setter TargetName="Popup" Property="PopupAnimation" Value="None" />
            </Trigger>
            <Trigger Property="IsHighlighted" Value="true">
                <Setter TargetName="Border" Property="BorderBrush" Value="Transparent" />
                <Setter Property="Background" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <LinearGradientBrush.GradientStops>
                                <GradientStopCollection>
                                    <GradientStop Color="{StaticResource ControlLightColor}" />
                                    <GradientStop Color="{StaticResource ControlMouseOverColor}" Offset="1.0" />
                                </GradientStopCollection>
                            </LinearGradientBrush.GradientStops>
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger SourceName="Popup" Property="AllowsTransparency" Value="True">
                <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="0,0,4,4" />
                <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,0,0,3" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <!-- TopLevelItem -->
    <ControlTemplate x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" TargetType="{x:Type MenuItem}">
        <Border x:Name="Border">
            <Grid>
                <ContentPresenter Margin="6,3,6,3" ContentSource="Header" RecognizesAccessKey="True" />
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsHighlighted" Value="true">
                <Setter Property="Background" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <LinearGradientBrush.GradientStops>
                                <GradientStopCollection>
                                    <GradientStop Color="{StaticResource ControlLightColor}" />
                                    <GradientStop Color="{StaticResource ControlMouseOverColor}" Offset="1.0" />
                                </GradientStopCollection>
                            </LinearGradientBrush.GradientStops>
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <!-- SubmenuItem -->
    <ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" TargetType="{x:Type MenuItem}">
        <Border x:Name="Border" BorderThickness="1">
            <Grid>
                <ContentPresenter x:Name="HeaderHost" ContentSource="Header" RecognizesAccessKey="True" />
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsHighlighted" Value="true">
                <Setter Property="Background" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="Transparent" Offset="0" />
                            <GradientStop Color="{DynamicResource ControlMouseOverColor}" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderBrush" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="{DynamicResource BorderMediumColor}" Offset="0" />
                            <GradientStop Color="Transparent" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <ControlTemplate x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}"
             TargetType="{x:Type MenuItem}">
        <Border x:Name="Border" BorderThickness="1">
            <Grid>
                <ContentPresenter x:Name="HeaderHost" ContentSource="Header" RecognizesAccessKey="True" />
                <Popup x:Name="Popup" Placement="Right" HorizontalOffset="-4" IsOpen="{TemplateBinding IsSubmenuOpen}"
                        AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
                    <Border x:Name="SubmenuBorder" SnapsToDevicePixels="True" Background="{DynamicResource MenuPopupBrush}"
                            BorderThickness="1">
                        <Border.BorderBrush>
                            <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
                        </Border.BorderBrush>
                        <ScrollViewer CanContentScroll="True" Style="{StaticResource MenuScrollViewer}">
                            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" />
                        </ScrollViewer>
                    </Border>
                </Popup>
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsHighlighted" Value="true">
                <Setter Property="Background" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="Transparent" Offset="0" />
                            <GradientStop Color="{DynamicResource ControlMouseOverColor}" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderBrush" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="{DynamicResource BorderMediumColor}" Offset="0" />
                            <GradientStop Color="Transparent" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger SourceName="Popup" Property="AllowsTransparency" Value="True">
                <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="4" />
                <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,3,0,3" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <!-- MenuItem Style -->
    <Style x:Key="{x:Type MenuItem}"
   TargetType="{x:Type MenuItem}">
        <Setter Property="OverridesDefaultStyle"
      Value="True" />
        <Style.Triggers>
            <Trigger Property="Role"
         Value="TopLevelHeader">
                <Setter Property="Template"
          Value="{StaticResource {x:Static MenuItem.TopLevelHeaderTemplateKey}}" />
                <Setter Property="Grid.IsSharedSizeScope"
          Value="true" />
            </Trigger>
            <Trigger Property="Role"
         Value="TopLevelItem">
                <Setter Property="Template"
          Value="{StaticResource {x:Static MenuItem.TopLevelItemTemplateKey}}" />
            </Trigger>
            <Trigger Property="Role"
         Value="SubmenuHeader">
                <Setter Property="Template"
          Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}" />
            </Trigger>
            <Trigger Property="Role"
         Value="SubmenuItem">
                <Setter Property="Template"
          Value="{StaticResource {x:Static MenuItem.SubmenuItemTemplateKey}}" />
            </Trigger>
        </Style.Triggers>
    </Style>



</Window.Resources>
    <Grid Background="Red">
    <Grid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="This is a menu item without InputGesture area"/>
        </ContextMenu>
    </Grid.ContextMenu>
   </Grid>

</Window>
于 2012-06-12T21:04:51.317 に答える