locked
MenuItem Height RRS feed

  • Question

  • Hello,

    I am trying to have a bit larger content in the context menu's item. Obviously it does not size to fit, but it allows me to set the Height to fixed value. That would be fine, however, that only adds spacing to the menu item, it still displays the hover border and crops the content as if the height was not set. I have tried various Vertical/Content alignments and it does not help either. Moreover, the WPF Designer is a bit unstable choosing how to render a menu items with set height. At runtime though, the menu item's header consistently does not fill the whole menu item bounds. How could one set the height of the menu item?

    Thanks,

    Jan

    Monday, August 6, 2012 10:58 AM

Answers

  • Hi Jan Kucera,

    I test your code on Windows7/Window8(RTM), your xaml code works well and both are same effect, additional, we do not support W8 CP at all, you should run it on W8 RTM, then I think you could get the result you want.

    Best regards,


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • Marked as answer by Jan Kučera Tuesday, August 7, 2012 6:22 AM
    Tuesday, August 7, 2012 6:07 AM

All replies

  • Sorry, I don't think I understand the problem clearly.

    MenuItems (headers and content) do size to fit:

    <Grid Background="AliceBlue">
    	<Grid.ContextMenu>
    		<ContextMenu>
    				<MenuItem>
    					<MenuItem.Header>
    						<Rectangle Height="200" Width="200" Fill="Red"/>
    					</MenuItem.Header>
    				</MenuItem>
    				<MenuItem>
    					<MenuItem.Header>
    						<Rectangle Height="100" Width="200" Fill="Green"/>
    					</MenuItem.Header>
    				</MenuItem>
    				<MenuItem Header="Three">
    					<Rectangle Height="150" Width="20" Fill="Blue"/>
    				</MenuItem>
    		</ContextMenu>
    	</Grid.ContextMenu>
    </Grid>

    If you want to pull the actual template apart and make deeper changes, below is the complete ControlTemplate dump that Expression Blend gives for the MenuItem. In other words, this is default template for menu Item. There is a lot here I know, but Blend gives all the templates, resources etc used in the menu Item. With this you can study exactly how the control is made. You can then tailor it to your needs. This is the usual way to tweak controls. You use the style, like <MenuItem style="MenuItemStyle1">

    	<Window.Resources>
    		<LinearGradientBrush x:Key="MenuItemSelectionFill" EndPoint="0,1" StartPoint="0,0">
    			<GradientStop Color="#34C5EBFF" Offset="0"/>
    			<GradientStop Color="#3481D8FF" Offset="1"/>
    		</LinearGradientBrush>
    		<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>
    		<ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
    			<Grid SnapsToDevicePixels="true">
    				<Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
    				<Rectangle x:Name="InnerBorder" Margin="1" RadiusY="2" RadiusX="2"/>
    				<Grid>
    					<Grid.ColumnDefinitions>
    						<ColumnDefinition MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/>
    						<ColumnDefinition Width="4"/>
    						<ColumnDefinition Width="*"/>
    						<ColumnDefinition Width="37"/>
    						<ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/>
    						<ColumnDefinition Width="17"/>
    					</Grid.ColumnDefinitions>
    					<ContentPresenter x:Name="Icon" ContentSource="Icon" Margin="1" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
    					<Border x:Name="GlyphPanel" BorderBrush="#CDD3E6" BorderThickness="1" Background="#E6EFF4" CornerRadius="3" Height="22" Margin="1" Visibility="Hidden" Width="22">
    						<Path x:Name="Glyph" Data="{StaticResource Checkmark}" Fill="#0C12A1" FlowDirection="LeftToRight" Height="11" Width="9"/>
    					</Border>
    					<ContentPresenter Grid.Column="2" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    					<TextBlock Grid.Column="4" Margin="{TemplateBinding Padding}" Text="{TemplateBinding InputGestureText}"/>
    				</Grid>
    			</Grid>
    			<ControlTemplate.Triggers>
    				<Trigger Property="Icon" Value="{x:Null}">
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="IsChecked" Value="true">
    					<Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="IsHighlighted" Value="true">
    					<Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemSelectionFill}"/>
    					<Setter Property="Stroke" TargetName="Bg" Value="#8071CBF1"/>
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#40FFFFFF"/>
    				</Trigger>
    				<Trigger Property="IsEnabled" Value="false">
    					<Setter Property="Foreground" Value="#FF9A9A9A"/>
    					<Setter Property="Background" TargetName="GlyphPanel" Value="#EEE9E9"/>
    					<Setter Property="BorderBrush" TargetName="GlyphPanel" Value="#DBD6D6"/>
    					<Setter Property="Fill" TargetName="Glyph" Value="#848589"/>
    				</Trigger>
    			</ControlTemplate.Triggers>
    		</ControlTemplate>
    		<LinearGradientBrush x:Key="MenuItemPressedFill" EndPoint="0,1" StartPoint="0,0">
    			<GradientStop Color="#28717070" Offset="0"/>
    			<GradientStop Color="#50717070" Offset="0.75"/>
    			<GradientStop Color="#90717070" Offset="1"/>
    		</LinearGradientBrush>
    		<SolidColorBrush x:Key="SubMenuBackgroundBrush" Color="#FFF5F5F5"/>
    		<Geometry x:Key="UpArrow">M 0,4 L 3.5,0 L 7,4 Z</Geometry>
    		<Style x:Key="MenuScrollButton" BasedOn="{x:Null}" TargetType="{x:Type RepeatButton}">
    			<Setter Property="ClickMode" Value="Hover"/>
    			<Setter Property="MinWidth" Value="0"/>
    			<Setter Property="MinHeight" Value="0"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type RepeatButton}">
    						<DockPanel Background="Transparent" SnapsToDevicePixels="true">
    							<Rectangle x:Name="R1" DockPanel.Dock="Right" Fill="Transparent" Width="1"/>
    							<Rectangle x:Name="B1" DockPanel.Dock="Bottom" Fill="Transparent" Height="1"/>
    							<Rectangle x:Name="L1" DockPanel.Dock="Left" Fill="Transparent" Width="1"/>
    							<Rectangle x:Name="T1" DockPanel.Dock="Top" Fill="Transparent" Height="1"/>
    							<ContentPresenter x:Name="ContentContainer" HorizontalAlignment="Center" Margin="2,2,2,2" VerticalAlignment="Center"/>
    						</DockPanel>
    						<ControlTemplate.Triggers>
    							<Trigger Property="IsPressed" Value="true">
    								<Setter Property="Fill" TargetName="R1" Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}"/>
    								<Setter Property="Fill" TargetName="B1" Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}"/>
    								<Setter Property="Fill" TargetName="L1" Value="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}"/>
    								<Setter Property="Fill" TargetName="T1" Value="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}"/>
    								<Setter Property="Margin" TargetName="ContentContainer" Value="3,3,1,1"/>
    							</Trigger>
    						</ControlTemplate.Triggers>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    		<MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter"/>
    		<Geometry x:Key="DownArrow">M 0,0 L 3.5,4 L 7,0 Z</Geometry>
    		<Style x:Key="{ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}" BasedOn="{x:Null}" TargetType="{x:Type ScrollViewer}">
    			<Setter Property="HorizontalScrollBarVisibility" Value="Hidden"/>
    			<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ScrollViewer}">
    						<Grid SnapsToDevicePixels="true">
    							<Grid.ColumnDefinitions>
    								<ColumnDefinition Width="*"/>
    							</Grid.ColumnDefinitions>
    							<Grid.RowDefinitions>
    								<RowDefinition Height="Auto"/>
    								<RowDefinition Height="*"/>
    								<RowDefinition Height="Auto"/>
    							</Grid.RowDefinitions>
    							<Border Grid.Column="0" Grid.Row="1">
    								<ScrollContentPresenter Margin="{TemplateBinding Padding}"/>
    							</Border>
    							<RepeatButton Grid.Column="0" CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" Command="{x:Static ScrollBar.LineUpCommand}" Focusable="false" Grid.Row="0" Style="{StaticResource MenuScrollButton}">
    								<RepeatButton.Visibility>
    									<MultiBinding ConverterParameter="0" Converter="{StaticResource MenuScrollingVisibilityConverter}" FallbackValue="Visibility.Collapsed">
    										<Binding Path="ComputedVerticalScrollBarVisibility" RelativeSource="{RelativeSource TemplatedParent}"/>
    										<Binding Path="VerticalOffset" RelativeSource="{RelativeSource TemplatedParent}"/>
    										<Binding Path="ExtentHeight" RelativeSource="{RelativeSource TemplatedParent}"/>
    										<Binding Path="ViewportHeight" RelativeSource="{RelativeSource TemplatedParent}"/>
    									</MultiBinding>
    								</RepeatButton.Visibility>
    								<Path Data="{StaticResource UpArrow}" Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
    							</RepeatButton>
    							<RepeatButton Grid.Column="0" CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" Command="{x:Static ScrollBar.LineDownCommand}" Focusable="false" Grid.Row="2" Style="{StaticResource MenuScrollButton}">
    								<RepeatButton.Visibility>
    									<MultiBinding ConverterParameter="100" Converter="{StaticResource MenuScrollingVisibilityConverter}" FallbackValue="Visibility.Collapsed">
    										<Binding Path="ComputedVerticalScrollBarVisibility" RelativeSource="{RelativeSource TemplatedParent}"/>
    										<Binding Path="VerticalOffset" RelativeSource="{RelativeSource TemplatedParent}"/>
    										<Binding Path="ExtentHeight" RelativeSource="{RelativeSource TemplatedParent}"/>
    										<Binding Path="ViewportHeight" RelativeSource="{RelativeSource TemplatedParent}"/>
    									</MultiBinding>
    								</RepeatButton.Visibility>
    								<Path Data="{StaticResource DownArrow}" Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
    							</RepeatButton>
    						</Grid>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    		<ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuContent, TypeInTargetAssembly={x:Type FrameworkElement}}" TargetType="{x:Type ContentControl}">
    			<Border BorderBrush="#FF959595" BorderThickness="1" Background="{StaticResource SubMenuBackgroundBrush}">
    				<Grid>
    					<Rectangle Fill="#F1F1F1" HorizontalAlignment="Left" Margin="2" RadiusY="2" RadiusX="2" Width="28"/>
    					<Rectangle Fill="#E2E3E3" HorizontalAlignment="Left" Margin="30,2,0,2" Width="1"/>
    					<Rectangle Fill="White" HorizontalAlignment="Left" Margin="31,2,0,2" Width="1"/>
    					<ContentPresenter Grid.ColumnSpan="2" Margin="1,0"/>
    				</Grid>
    			</Border>
    		</ControlTemplate>
    		<ControlTemplate x:Key="{ComponentResourceKey ResourceId=TopLevelHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
    			<Grid SnapsToDevicePixels="true">
    				<Rectangle x:Name="OuterBorder" RadiusY="2" RadiusX="2"/>
    				<Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" Margin="1" RadiusY="1" RadiusX="1" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
    				<Rectangle x:Name="InnerBorder" Margin="2"/>
    				<DockPanel>
    					<ContentPresenter x:Name="Icon" ContentSource="Icon" Margin="4,0,6,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
    					<Path x:Name="GlyphPanel" Data="{StaticResource Checkmark}" Fill="{TemplateBinding Foreground}" FlowDirection="LeftToRight" Margin="7,0,0,0" Visibility="Collapsed" VerticalAlignment="Center"/>
    					<ContentPresenter ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    				</DockPanel>
    				<Popup x:Name="PART_Popup" AllowsTransparency="true" Focusable="false" HorizontalOffset="1" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" Placement="Bottom" VerticalOffset="-1">
    					<Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent">
    						<ContentControl x:Name="SubMenuBorder" IsTabStop="false" Template="{DynamicResource {ComponentResourceKey ResourceId=SubmenuContent, TypeInTargetAssembly={x:Type FrameworkElement}}}">
    							<ScrollViewer x:Name="SubMenuScrollViewer" CanContentScroll="true" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
    								<Grid RenderOptions.ClearTypeHint="Enabled">
    									<Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
    										<Rectangle Fill="{StaticResource SubMenuBackgroundBrush}" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/>
    									</Canvas>
    									<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="true" Margin="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/>
    								</Grid>
    							</ScrollViewer>
    						</ContentControl>
    					</Microsoft_Windows_Themes:SystemDropShadowChrome>
    				</Popup>
    			</Grid>
    			<ControlTemplate.Triggers>
    				<Trigger Property="IsSuspendingPopupAnimation" Value="true">
    					<Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/>
    				</Trigger>
    				<Trigger Property="Icon" Value="{x:Null}">
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="IsChecked" Value="true">
    					<Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
    					<Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
    					<Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
    				</Trigger>
    				<Trigger Property="IsHighlighted" Value="true">
    					<Setter Property="Stroke" TargetName="Bg" Value="#90717070"/>
    					<Setter Property="Stroke" TargetName="OuterBorder" Value="#50FFFFFF"/>
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#50FFFFFF"/>
    				</Trigger>
    				<Trigger Property="IsKeyboardFocused" Value="true">
    					<Setter Property="Stroke" TargetName="Bg" Value="#E0717070"/>
    					<Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemPressedFill}"/>
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#50747272"/>
    				</Trigger>
    				<Trigger Property="IsSubmenuOpen" Value="true">
    					<Setter Property="Stroke" TargetName="Bg" Value="#E0717070"/>
    					<Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemPressedFill}"/>
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#50747272"/>
    				</Trigger>
    				<Trigger Property="IsEnabled" Value="false">
    					<Setter Property="Foreground" Value="#FF9A9A9A"/>
    					<Setter Property="Fill" TargetName="GlyphPanel" Value="#848589"/>
    				</Trigger>
    			</ControlTemplate.Triggers>
    		</ControlTemplate>
    		<ControlTemplate x:Key="{ComponentResourceKey ResourceId=TopLevelItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
    			<Grid SnapsToDevicePixels="true">
    				<Rectangle x:Name="OuterBorder" RadiusY="2" RadiusX="2"/>
    				<Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" Margin="1" RadiusY="1" RadiusX="1" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
    				<Rectangle x:Name="InnerBorder" Margin="2"/>
    				<DockPanel>
    					<ContentPresenter x:Name="Icon" ContentSource="Icon" Margin="4,0,6,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
    					<Path x:Name="GlyphPanel" Data="{StaticResource Checkmark}" Fill="{TemplateBinding Foreground}" FlowDirection="LeftToRight" Margin="7,0,0,0" Visibility="Collapsed" VerticalAlignment="Center"/>
    					<ContentPresenter ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    				</DockPanel>
    			</Grid>
    			<ControlTemplate.Triggers>
    				<Trigger Property="Icon" Value="{x:Null}">
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="IsChecked" Value="true">
    					<Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="IsHighlighted" Value="true">
    					<Setter Property="Stroke" TargetName="Bg" Value="#90717070"/>
    					<Setter Property="Stroke" TargetName="OuterBorder" Value="#50FFFFFF"/>
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#50FFFFFF"/>
    				</Trigger>
    				<Trigger Property="IsKeyboardFocused" Value="true">
    					<Setter Property="Stroke" TargetName="Bg" Value="#E0717070"/>
    					<Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemPressedFill}"/>
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#50747272"/>
    				</Trigger>
    				<Trigger Property="IsEnabled" Value="false">
    					<Setter Property="Foreground" Value="#FF9A9A9A"/>
    					<Setter Property="Fill" TargetName="GlyphPanel" Value="#848589"/>
    				</Trigger>
    			</ControlTemplate.Triggers>
    		</ControlTemplate>
    		<Geometry x:Key="RightArrow">M 0,0 L 4,3.5 L 0,7 Z</Geometry>
    		<ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
    			<Grid SnapsToDevicePixels="true">
    				<Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
    				<Rectangle x:Name="InnerBorder" Margin="1" RadiusY="2" RadiusX="2" Stroke="Transparent" StrokeThickness="1"/>
    				<Grid>
    					<Grid.ColumnDefinitions>
    						<ColumnDefinition MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/>
    						<ColumnDefinition Width="4"/>
    						<ColumnDefinition Width="*"/>
    						<ColumnDefinition Width="37"/>
    						<ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/>
    						<ColumnDefinition Width="17"/>
    					</Grid.ColumnDefinitions>
    					<ContentPresenter x:Name="Icon" ContentSource="Icon" Margin="1" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
    					<Border x:Name="GlyphPanel" BorderBrush="#CDD3E6" BorderThickness="1" Background="#E6EFF4" CornerRadius="3" Height="22" Margin="1" Visibility="Hidden" Width="22">
    						<Path x:Name="Glyph" Data="{StaticResource Checkmark}" Fill="#0C12A1" FlowDirection="LeftToRight" Height="11" Width="9"/>
    					</Border>
    					<ContentPresenter Grid.Column="2" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    					<TextBlock Grid.Column="4" Margin="{TemplateBinding Padding}" Text="{TemplateBinding InputGestureText}" Visibility="Collapsed"/>
    					<Path Grid.Column="5" Data="{StaticResource RightArrow}" Fill="{TemplateBinding Foreground}" Margin="4,0,0,0" VerticalAlignment="Center"/>
    				</Grid>
    				<Popup x:Name="PART_Popup" AllowsTransparency="true" Focusable="false" HorizontalOffset="-2" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" Placement="Right" VerticalOffset="-3">
    					<Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent">
    						<ContentControl x:Name="SubMenuBorder" IsTabStop="false" Template="{DynamicResource {ComponentResourceKey ResourceId=SubmenuContent, TypeInTargetAssembly={x:Type FrameworkElement}}}">
    							<ScrollViewer x:Name="SubMenuScrollViewer" CanContentScroll="true" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
    								<Grid RenderOptions.ClearTypeHint="Enabled">
    									<Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
    										<Rectangle Fill="{StaticResource SubMenuBackgroundBrush}" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/>
    									</Canvas>
    									<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="true" Margin="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/>
    								</Grid>
    							</ScrollViewer>
    						</ContentControl>
    					</Microsoft_Windows_Themes:SystemDropShadowChrome>
    				</Popup>
    			</Grid>
    			<ControlTemplate.Triggers>
    				<Trigger Property="IsSuspendingPopupAnimation" Value="true">
    					<Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/>
    				</Trigger>
    				<Trigger Property="IsHighlighted" Value="true">
    					<Setter Property="Stroke" TargetName="InnerBorder" Value="#D1DBF4FF"/>
    				</Trigger>
    				<Trigger Property="Icon" Value="{x:Null}">
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="IsChecked" Value="true">
    					<Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
    					<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
    				</Trigger>
    				<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
    					<Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
    					<Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
    				</Trigger>
    				<Trigger Property="IsHighlighted" Value="true">
    					<Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemSelectionFill}"/>
    					<Setter Property="Stroke" TargetName="Bg" Value="#8571CBF1"/>
    				</Trigger>
    				<Trigger Property="IsEnabled" Value="false">
    					<Setter Property="Foreground" Value="#FF9A9A9A"/>
    					<Setter Property="Background" TargetName="GlyphPanel" Value="#EEE9E9"/>
    					<Setter Property="BorderBrush" TargetName="GlyphPanel" Value="#DBD6D6"/>
    					<Setter Property="Fill" TargetName="Glyph" Value="#848589"/>
    				</Trigger>
    			</ControlTemplate.Triggers>
    		</ControlTemplate>
    		<Style x:Key="MenuItemStyle1" TargetType="{x:Type MenuItem}">
    			<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    			<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    			<Setter Property="Background" Value="Transparent"/>
    			<Setter Property="ScrollViewer.PanningMode" Value="Both"/>
    			<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    			<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}"/>
    			<Style.Triggers>
    				<Trigger Property="Role" Value="TopLevelHeader">
    					<Setter Property="Padding" Value="7,2,8,3"/>
    					<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=TopLevelHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}"/>
    				</Trigger>
    				<Trigger Property="Role" Value="TopLevelItem">
    					<Setter Property="Padding" Value="7,2,8,3"/>
    					<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=TopLevelItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}"/>
    				</Trigger>
    				<Trigger Property="Role" Value="SubmenuHeader">
    					<Setter Property="Padding" Value="2,3,2,3"/>
    					<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=SubmenuHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}"/>
    				</Trigger>
    				<Trigger Property="Role" Value="SubmenuItem">
    					<Setter Property="Padding" Value="2,3,2,3"/>
    				</Trigger>
    			</Style.Triggers>
    		</Style>
    	</Window.Resources>
     
    Regards,
    Pete

    #PEJL

    Monday, August 6, 2012 11:23 AM
  • Hmmm... Hi Pete, this is exactly what I want to achieve, however, it simply does not work for me...

    Screen shot of Pete's code

    Monday, August 6, 2012 11:59 AM
  • And what I was refering to is that even when I explicitly set the height of the menuitem:

    <Grid Background="AliceBlue">
        <Grid.ContextMenu>
            <ContextMenu>
                <MenuItem Height="200">
                    <MenuItem.Header>
                        <Rectangle Height="200" Width="200" Fill="Red"/>
                    </MenuItem.Header>
                </MenuItem>
            </ContextMenu>
        </Grid.ContextMenu>
    </Grid>

    it does not help either:

    menuitem with height=200


    • Edited by Jan Kučera Monday, August 6, 2012 12:03 PM
    Monday, August 6, 2012 12:02 PM
  • You must have an implicit MenuItem style somewhere, or theme, or something that is affecting your MenuItem.

    Can you confirm that this is happening in a brand new WPF project, with nothing but the example above?

    It sounds like something somewhere is fixing the height of your MenuItems.

    What you show is not standard, so there must be something else that is affecting it.

    Also, try using the Blend style dump above, assign it to your menu items as explained.

    Good luck,

    Pete


    #PEJL


    Monday, August 6, 2012 12:04 PM
  • This was of course blank WPF project, 4.5, running on W8 RP. It is the same when I target 4.0 framework. However, it starts working as you showed when I target the 3.5 framework... What version do you use?

    The style cannot be that easily used as it references SystemDropShadowChrome. Moreover I would prefer to have the default theme selection working (aero/non-aero), and this would prevent it, wouldn't it?


    • Edited by Jan Kučera Tuesday, August 7, 2012 6:23 AM winver
    Monday, August 6, 2012 12:15 PM
  • Hi again

    I use .net4 client profile by default, but tried it on .net4 full too and was the same, I very much doubt it is a .net issue

    I am on Windows 7

    And your example code with height looks like this to me :/

    I'm sorry if I didn't explain very well, but the xaml I gave you above IS the standard Style & ControlTemplate for a MenuItem, as output by Expression Blend. In other words, when you put <MenuItem .../> , the xaml above is what is actually used internally.

    I omitted the Window declaration, which has the namespace your needed:

    xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

    Blend lets you take a copy of any control's Style & ContrrolTemplate, and learn from that, and change it.
    So assigning this style to your MenuItem is exactly the same as a standard MenuItem.
    The standard WPF controls DO use the Chrome theme parts by default.

    However, by using the style explicitly (referring to a style key resource), you are overriding any other implicit or hidden styles that may be affecting your MenuItem.

    I was offering that for you to test to see if it returns your menuItems to the stretchy height controls I find them to be.

    As you have clarified that this was a new application, I am indeed puzzled. 
    I hope at least my posts have been helpful in narrowing the problem.

    Maybe applying the style above may actually fix it enough for you, to get on with your project.

    My next guess would be Windows 8 CP...?

    Good luck,
    Pete


    #PEJL



    Monday, August 6, 2012 1:38 PM
  • Hi Jan Kucera,

    I test your code on Windows7/Window8(RTM), your xaml code works well and both are same effect, additional, we do not support W8 CP at all, you should run it on W8 RTM, then I think you could get the result you want.

    Best regards,


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • Marked as answer by Jan Kučera Tuesday, August 7, 2012 6:22 AM
    Tuesday, August 7, 2012 6:07 AM
  • Great to hear somebody discovered it and fixed it, looks like it would be too late now. :)

    It was actually Release Preview on my side, sorry for confusion; and feel free to delete the thread as it turns out to discuss prerelease configuration. Thanks both for help!

    Looking forward the RTM build.


    • Edited by Jan Kučera Tuesday, August 7, 2012 6:27 AM
    Tuesday, August 7, 2012 6:25 AM