Me he dado cuenta de que si configura IsCheckable y tiene una imagen para un elemento de menú, cuando se marca el elemento, la imagen desaparece. ¿Es posible hacer que funcione de manera similar al antiguo .Net 2.0 para que cuando se compruebe, la imagen tenga un borde alrededor? Gracias Paul.WPF MenuItem con imagen e IsCheckable set
6
A
Respuesta
6
Debería volver a diseñar los ítems del menú para lograr eso. Puede tomar los Estilos predeterminados desde here, por ejemplo Aero, y extraer el Estilo (y pinceles relevantes) para el Item de menú. Una vez que tenga eso, puede personalizarlo todo lo que quiera.
Para Menultem, puede en realidad sólo redefinir el SubmenuItemTemplateKey y SubmenuHeaderTemplateKey ControlTemplate, añadiendo esto a sus recursos de aplicación (sacado de archivo de arriba y ajustado):
<Application x:Class="MyApplication.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Geometry x:Key="RightArrow">M 0,0 L 4,3.5 L 0,7 Z</Geometry>
<Geometry x:Key="Checkmark">M 0,5.1 L 1.7,5.2 L 3.4,7.1 L 8,0.4 L 9.2,0 L 3.3,10.8 Z</Geometry>
<LinearGradientBrush x:Key="MenuItemSelectionFill"
StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStop Color="#34C5EBFF"
Offset="0" />
<GradientStop Color="#3481D8FF"
Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem}, ResourceId=SubmenuItemTemplateKey}"
TargetType="{x:Type MenuItem}">
<Grid SnapsToDevicePixels="true">
<Rectangle Name="Bg"
Fill="{TemplateBinding MenuItem.Background}"
Stroke="{TemplateBinding MenuItem.BorderBrush}"
StrokeThickness="1"
RadiusX="2"
RadiusY="2" />
<Rectangle x:Name="InnerBorder"
Margin="1"
RadiusX="2"
RadiusY="2" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="24"
Width="Auto"
SharedSizeGroup="MenuItemIconColumnGroup" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="37" />
<ColumnDefinition Width="Auto"
SharedSizeGroup="MenuItemIGTColumnGroup" />
<ColumnDefinition Width="17" />
</Grid.ColumnDefinitions>
<Border x:Name="GlyphPanel"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="1"
CornerRadius="3"
Margin="1"
Width="22"
Height="22">
<Grid>
<Path Name="Glyph"
Width="9"
Height="11"
Fill="#0C12A1"
FlowDirection="LeftToRight"
Data="{StaticResource Checkmark}"
Visibility="Collapsed" />
<ContentPresenter x:Name="Icon"
Margin="1"
VerticalAlignment="Center"
ContentSource="Icon"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Grid>
</Border>
<ContentPresenter Grid.Column="2"
ContentSource="Header"
Margin="{TemplateBinding MenuItem.Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<TextBlock Grid.Column="4"
Text="{TemplateBinding MenuItem.InputGestureText}"
Margin="{TemplateBinding MenuItem.Padding}" />
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Icon"
Value="{x:Null}">
<Setter TargetName="Icon"
Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger Property="IsChecked"
Value="true">
<Setter TargetName="GlyphPanel"
Property="Background"
Value="#E6EFF4" />
<Setter TargetName="GlyphPanel"
Property="BorderBrush"
Value="#CDD3E6" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Icon"
Value="{x:Null}" />
<Condition Property="IsChecked"
Value="true" />
</MultiTrigger.Conditions>
<Setter TargetName="Glyph"
Property="Visibility"
Value="Visible" />
<Setter TargetName="Icon"
Property="Visibility"
Value="Collapsed" />
</MultiTrigger>
<Trigger Property="IsHighlighted"
Value="true">
<Setter TargetName="Bg"
Property="Fill"
Value="{StaticResource MenuItemSelectionFill}" />
<Setter TargetName="Bg"
Property="Stroke"
Value="#8071CBF1" />
<Setter TargetName="InnerBorder"
Property="Stroke"
Value="#40FFFFFF" />
</Trigger>
<Trigger Property="IsEnabled"
Value="false">
<Setter Property="Foreground"
Value="#FF9A9A9A" />
<Setter TargetName="GlyphPanel"
Property="Background"
Value="#EEE9E9" />
<Setter TargetName="GlyphPanel"
Property="BorderBrush"
Value="#DBD6D6" />
<Setter TargetName="Glyph"
Property="Fill"
Value="#848589" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem}, ResourceId=SubmenuHeaderTemplateKey}"
TargetType="{x:Type MenuItem}">
<Grid SnapsToDevicePixels="true">
<Rectangle Name="Bg"
Fill="{TemplateBinding MenuItem.Background}"
Stroke="{TemplateBinding MenuItem.BorderBrush}"
StrokeThickness="1"
RadiusX="2"
RadiusY="2" />
<Rectangle x:Name="InnerBorder"
Margin="1"
Stroke="Transparent"
StrokeThickness="1"
RadiusX="2"
RadiusY="2" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="24"
Width="Auto"
SharedSizeGroup="MenuItemIconColumnGroup" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="37" />
<ColumnDefinition Width="Auto"
SharedSizeGroup="MenuItemIGTColumnGroup" />
<ColumnDefinition Width="17" />
</Grid.ColumnDefinitions>
<Border x:Name="GlyphPanel"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="1"
CornerRadius="3"
Margin="1"
Width="22"
Height="22">
<Grid>
<Path Name="Glyph"
Width="9"
Height="11"
Fill="#0C12A1"
FlowDirection="LeftToRight"
Data="{StaticResource Checkmark}"
Visibility="Collapsed" />
<ContentPresenter x:Name="Icon"
Margin="1"
VerticalAlignment="Center"
ContentSource="Icon"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Grid>
</Border>
<ContentPresenter Grid.Column="2"
ContentSource="Header"
Margin="{TemplateBinding MenuItem.Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<TextBlock Grid.Column="4"
Text="{TemplateBinding MenuItem.InputGestureText}"
Margin="{TemplateBinding MenuItem.Padding}"
Visibility="Collapsed" />
<Path Grid.Column="5"
VerticalAlignment="Center"
Margin="4,0,0,0"
Fill="{TemplateBinding MenuItem.Foreground}"
Data="{StaticResource RightArrow}" />
</Grid>
<Popup x:Name="PART_Popup"
AllowsTransparency="true"
Placement="Right"
VerticalOffset="-3"
HorizontalOffset="-2"
IsOpen="{Binding Path=IsSubmenuOpen,RelativeSource={RelativeSource TemplatedParent}}"
Focusable="false"
PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
<theme:SystemDropShadowChrome Name="Shdw"
Color="Transparent">
<ContentControl Name="SubMenuBorder"
Template="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement}, ResourceId=SubmenuContent}}"
IsTabStop="false">
<ScrollViewer CanContentScroll="true"
Style="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement}, ResourceId=MenuScrollViewer}}">
<ItemsPresenter Margin="2"
KeyboardNavigation.TabNavigation="Cycle"
KeyboardNavigation.DirectionalNavigation="Cycle"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Grid.IsSharedSizeScope="true" />
</ScrollViewer>
</ContentControl>
</theme:SystemDropShadowChrome>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSuspendingPopupAnimation"
Value="true">
<Setter TargetName="PART_Popup"
Property="PopupAnimation"
Value="None" />
</Trigger>
<Trigger Property="IsHighlighted"
Value="true">
<Setter TargetName="InnerBorder"
Property="Stroke"
Value="#D1DBF4FF" />
</Trigger>
<Trigger Property="Icon"
Value="{x:Null}">
<Setter TargetName="Icon"
Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger Property="IsChecked"
Value="true">
<Setter TargetName="GlyphPanel"
Property="Background"
Value="#E6EFF4" />
<Setter TargetName="GlyphPanel"
Property="BorderBrush"
Value="#CDD3E6" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Icon"
Value="{x:Null}" />
<Condition Property="IsChecked"
Value="true" />
</MultiTrigger.Conditions>
<Setter TargetName="Glyph"
Property="Visibility"
Value="Visible" />
<Setter TargetName="Icon"
Property="Visibility"
Value="Collapsed" />
</MultiTrigger>
<Trigger SourceName="PART_Popup"
Property="Popup.HasDropShadow"
Value="true">
<Setter TargetName="Shdw"
Property="Margin"
Value="0,0,5,5" />
<Setter TargetName="Shdw"
Property="Color"
Value="#71000000" />
</Trigger>
<Trigger Property="IsHighlighted"
Value="true">
<Setter TargetName="Bg"
Property="Fill"
Value="{StaticResource MenuItemSelectionFill}" />
<Setter TargetName="Bg"
Property="Stroke"
Value="#8571CBF1" />
</Trigger>
<Trigger Property="IsEnabled"
Value="false">
<Setter Property="Foreground"
Value="#FF9A9A9A" />
<Setter TargetName="GlyphPanel"
Property="Background"
Value="#EEE9E9" />
<Setter TargetName="GlyphPanel"
Property="BorderBrush"
Value="#DBD6D6" />
<Setter TargetName="Glyph"
Property="Fill"
Value="#848589" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Application.Resources>
</Application>
que tendría que añadir una referencia a PresentationSource .Aero para su proyecto y es posible que desee oscurecer los colores para el GlyphPanel cuando esté marcado.
Cuestiones relacionadas
- 1. WPF MenuItem IsChecked La vinculación no funciona
- 2. WPF MenuItem Encabezado y HeaderTemplate
- 3. Wpf- ¿Imposible lanzar MenuItem a Listbox?
- 4. "set -e" en una función
- 5. Vinculando ItemsSource y IsChecked de un MenuItem para obtener una lista de elementos seleccionables en WPF
- 6. Botón WPF con imagen
- 7. Cargue la imagen del archivo e imprima usando WPF ... ¿cómo?
- 8. imagen/pjpeg e imagen/jpeg
- 9. Estilo óptico WPF de MenuItem-Separator creado dinámicamente en MVVM
- 10. Android MenuItem Botón de alternar
- 11. elemento de menú WPF con la imagen
- 12. ASP.NET MenuItem Estilos individuales
- 13. Análogo de Powershell del `set -e` de Bash
- 14. bash set -e i = 0; let i ++ no acepta
- 15. WPF Imagen/Evento representación
- 16. Uso de imágenes e iconos en WPF
- 17. WPF imagen para byte []
- 18. Plantilla de botón con imagen y texto en wpf
- 19. Botón con AMBOS colores e imagen de fondo
- 20. Seguimiento de correo electrónico con PHP e imagen
- 21. ¿Qué pasa con `std :: set`?
- 22. ¿Cómo conseguir una imagen desde un archivo de recursos en un menuitem.icon WPF
- 23. ¿Diferencia entre botón con imagen, botón de imagen e ImageView clicable?
- 24. WPF: Cortar y guardar imagen
- 25. Arrastrando una imagen en WPF
- 26. Texto e imagen personalizados de Google +1
- 27. php gd imagecreatefromstring() e imagen mime type
- 28. Fuente de control de imagen WPF
- 29. WPF hide MenuItem en ContextMenu basado en la propiedad del objeto
- 30. ¿Cómo puedo incorporar una lista de elementos de menú enlazados a otro elemento MenuItem en WPF?
Me encanta ver cómo las cosas simples en Windows Forms van hacia atrás en WPF ... :( –
Sí. Al igual que muchas otras abstracciones, uno se queda con la escritura en XML - un lenguaje de marcado - lo que debería ser código . – NathanAldenSr