2011-01-21 31 views
13

Tôi có ContextMenu sau được nối vào một ListBox. Tôi thực sự muốn loại bỏ không gian nơi biểu tượng được. Điều này có thể thực hiện được một cách dễ dàng không?Xóa không gian biểu tượng trên ContextMenu

    <ListBox.ContextMenu> 
        <ContextMenu > 
         <MenuItem x:Name="check" Header="Check all" Click="CheckAll" /> 
         <MenuItem x:Name="uncheck" Header="Uncheck all" Click="UnCheckAll" /> 
        </ContextMenu> 
       </ListBox.ContextMenu> 
+0

Câu trả lời của Mike là câu trả lời hay nhất - hãy đánh dấu câu trả lời (nhấp vào dấu tích) Carl? –

Trả lời

10

Bạn cần thay đổi mẫu và mẫu điều khiển MenuItem. Trên thực tế bạn cần xác định lại 4 mẫu điều khiển cho 4 vai trò khác nhau của MenuItem. Đây là mã điểm bắt đầu bạn cần thay đổi cho nhu cầu của mình. Đặt nó vào tài nguyên cửa sổ của bạn hoặc nơi thích hợp khác.

<!-- SimpleStyles: MenuItem --> 

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}"> 
    <Setter Property="Height" Value="1"/> 
    <Setter Property="Margin" Value="0,4,0,4"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Separator}"> 
     <Border BorderBrush="#888888" BorderThickness="1"/> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

<!-- TopLevelHeader --> 

<ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}" TargetType="{x:Type MenuItem}"> 
    <Border Name="Border" > 
    <Grid> 
     <ContentPresenter 
     Margin="6,3,6,3" 
     ContentSource="Header" 
     RecognizesAccessKey="True" /> 
     <Popup 
     Name="Popup" 
     Placement="Bottom" 
     IsOpen="{TemplateBinding IsSubmenuOpen}" 
     AllowsTransparency="True" 
     Focusable="False" 
     PopupAnimation="Fade"> 
     <Border 
      Name="SubmenuBorder" 
      SnapsToDevicePixels="True" 
      Background="#FFFFFF" 
      BorderBrush="#888888" 
      BorderThickness="1" > 
      <StackPanel 
      IsItemsHost="True" 
      KeyboardNavigation.DirectionalNavigation="Cycle" /> 
     </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="Background" Value="#C0C0C0"/> 
     <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/> 
    </Trigger> 
    <Trigger SourceName="Popup" Property="Popup.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" Value="#888888"/> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<!-- TopLevelItem --> 

<ControlTemplate 
    x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" 
    TargetType="{x:Type MenuItem}"> 
    <Border Name="Border" > 
    <Grid> 
     <ContentPresenter 
     Margin="6,3,6,3" 
     ContentSource="Header" 
     RecognizesAccessKey="True" /> 
    </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
    <Trigger Property="IsHighlighted" Value="true"> 
     <Setter TargetName="Border" Property="Background" Value="#C0C0C0"/> 
     <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/> 
    </Trigger> 
    <Trigger Property="IsEnabled" Value="False"> 
     <Setter Property="Foreground" Value="#888888"/> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<!-- SubmenuItem --> 

<ControlTemplate 
    x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" 
    TargetType="{x:Type MenuItem}"> 
    <Border Name="Border" > 
    <Grid> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/> 
     <ColumnDefinition Width="13"/> 
     </Grid.ColumnDefinitions> 
     <ContentPresenter 
     Name="Icon" 
     Margin="6,0,6,0" 
     VerticalAlignment="Center" 
     ContentSource="Icon"/> 
     <Border 
     Name="Check" 
     Width="13" Height="13" 
     Visibility="Collapsed" 
     Margin="6,0,6,0" 
     Background="#C0C0C0" 
     BorderThickness="1" 
     BorderBrush="#404040"> 
     <Path 
      Name="CheckMark" 
      Width="7" Height="7" 
      Visibility="Hidden" 
      SnapsToDevicePixels="False" 
      Stroke="#404040" 
      StrokeThickness="2" 
      Data="M 0 0 L 7 7 M 0 7 L 7 0" /> 
     </Border> 
     <ContentPresenter 
     Name="HeaderHost" 
     Grid.Column="1" 
     ContentSource="Header" 
     RecognizesAccessKey="True"/> 
     <TextBlock x:Name="InputGestureText" 
     Grid.Column="2" 
     Text="{TemplateBinding InputGestureText}" 
     Margin="5,2,0,2" 
     DockPanel.Dock="Right" /> 
    </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
    <Trigger Property="Icon" Value="{x:Null}"> 
     <Setter TargetName="Icon" Property="Visibility" Value="Hidden"/> 
    </Trigger> 
    <Trigger Property="IsChecked" Value="true"> 
     <Setter TargetName="CheckMark" Property="Visibility" Value="Visible"/> 
    </Trigger> 
    <Trigger Property="IsCheckable" Value="true"> 
     <Setter TargetName="Check" Property="Visibility" Value="Visible"/> 
     <Setter TargetName="Icon" Property="Visibility" Value="Hidden"/> 
    </Trigger> 
    <Trigger Property="IsHighlighted" Value="true"> 
     <Setter TargetName="Border" Property="Background" Value="#DDDDDD"/> 
    </Trigger> 
    <Trigger Property="IsEnabled" Value="false"> 
     <Setter Property="Foreground" Value="#888888"/> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<!-- SubmenuHeader --> 

<ControlTemplate 
    x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}" 
    TargetType="{x:Type MenuItem}"> 
    <Border Name="Border" > 
    <Grid> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/> 
     <ColumnDefinition Width="13"/> 
     </Grid.ColumnDefinitions> 
     <ContentPresenter 
     Name="Icon" 
     Margin="6,0,6,0" 
     VerticalAlignment="Center" 
     ContentSource="Icon"/> 
     <ContentPresenter 
     Name="HeaderHost" 
     Grid.Column="1" 
     ContentSource="Header" 
     RecognizesAccessKey="True"/> 
     <TextBlock x:Name="InputGestureText" 
     Grid.Column="2" 
     Text="{TemplateBinding InputGestureText}" 
     Margin="5,2,2,2" 
     DockPanel.Dock="Right"/> 
     <Path 
     Grid.Column="3" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Data="M 0 0 L 0 7 L 4 3.5 Z" 
     Fill="#404040" /> 
     <Popup 
     Name="Popup" 
     Placement="Right" 
     HorizontalOffset="-4" 
     IsOpen="{TemplateBinding IsSubmenuOpen}" 
     AllowsTransparency="True" 
     Focusable="False" 
     PopupAnimation="Fade"> 
     <Border 
      Name="SubmenuBorder" 
      SnapsToDevicePixels="True" 
      Background="#FFFFFF" 
      BorderBrush="#888888" 
      BorderThickness="1" > 
      <StackPanel 
      IsItemsHost="True" 
      KeyboardNavigation.DirectionalNavigation="Cycle" /> 
     </Border> 
     </Popup> 
    </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
    <Trigger Property="Icon" Value="{x:Null}"> 
     <Setter TargetName="Icon" Property="Visibility" Value="Collapsed"/> 
    </Trigger> 
    <Trigger Property="IsHighlighted" Value="true"> 
     <Setter TargetName="Border" Property="Background" Value="#DDDDDD"/> 
    </Trigger> 
    <Trigger SourceName="Popup" Property="Popup.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" Value="#888888"/> 
    </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> 
+0

Bố cục không loại bỏ đường dọc tách tiêu đề biểu tượng và menu. Kết quả tương tự, chúng tôi có thể nhận được chỉ bằng hai dòng trong XAML - http://social.msdn.microsoft.com/Forums/vstudio/en-US/0465c6bf-241c-4cf5-b772-3d1a9bbc16b9/remove-icon-space-in- menuitem –

Các vấn đề liên quan