2011-01-21 36 views
13

üzerindeki simge boşluğunu kaldır Listede bir ContextMenu bağladım. Simgenin bulunduğu alanı kaldırmak istiyorum. Bu kolay bir şekilde mümkün mü?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

Mike'ın cevabı iyi bir soru - cevap olarak işaretle (kenara tıkla) Carl? –

cevap

10

MenuItem stilini ve denetim şablonunu değiştirmeniz gerekir. Aslında 4 farklı MenuItem rolü için 4 kontrol şablonunu yeniden tanımlamanız gerekiyor. Bu, ihtiyaçlarınız için değiştirmeniz gereken bir başlangıç ​​noktası kodudur. Pencere kaynaklarına veya başka bir uygun yere yerleştirin.

<!-- 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

Düzen, dikey çizgi ayrımı simgesini ve menü başlığını kaldırmaz. Benzer sonuç, XAML'de yalnızca iki satırdan yararlanabiliriz - http://social.msdn.microsoft.com/Forums/vstudio/en-US/0465c6bf-241c-4cf5-b772-3d1a9bbc16b9/remove-icon-space-in- menü seçeneği –

İlgili konular