1

When creating a menu in WPF, it shows the menu items box left aligned. Is there any property to make it appear right side aligned? (Like windows forms).

I have been searching all over internet without success and appreciate any help you could provide.

/* XAML CODE */

   <Menu>
        <MenuItem Header="One">
            <MenuItem Header="One-One"></MenuItem>
            <MenuItem Header="One-Two"></MenuItem>
            <MenuItem Header="One-Three"></MenuItem>
            <MenuItem Header="One-Four"></MenuItem>
            <MenuItem Header="One-Five"></MenuItem>
        </MenuItem>
        <MenuItem Header="Two">
            <MenuItem Header="Two-One"></MenuItem>
            <MenuItem Header="Two-Two"></MenuItem>
            <MenuItem Header="Two-Three"></MenuItem>
            <MenuItem Header="Two-Four"></MenuItem>
            <MenuItem Header="Two-Five"></MenuItem>
        </MenuItem>

    </Menu>

enter image description here

  • Yup, this is almost definitely a duplicate. Gist of the answer is that the alignment has nothing to do with your app. It's based on the "Left or Right Handed" setting in Windows to make the menus easier to use with touch. – Ben Randall May 04 '16 at 05:48

3 Answers3

4

The problem was on registry editor.

This web page solved my problem :

http://www.sevenforums.com/tutorials/786-menus-open-left-right-side.html

In my case just deleting or setting to 0 the key "MenuDropAlignment" in HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows solved the problem.

Hope this answer helps other people with the same problem.

And thanks to guys who tried to help.

1

You can edit the Template of Menu Items like this

<Window.Resources>
        <ControlTemplate x:Key="MenuItemControlTemplate1" TargetType="{x:Type MenuItem}">
            <Border x:Name="templateRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                <Grid VerticalAlignment="Center">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" HorizontalAlignment="Center" Height="16" Margin="3" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Width="16"/>
                    <Path x:Name="GlyphPanel" Data="F1M10,1.2L4.7,9.1 4.5,9.1 0,5.2 1.3,3.5 4.3,6.1 8.3,0 10,1.2z" Fill="{TemplateBinding Foreground}" FlowDirection="LeftToRight" Margin="3" Visibility="Collapsed" VerticalAlignment="Center"/>
                    <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="1" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    <Popup x:Name="PART_Popup" AllowsTransparency="True" Focusable="False" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" Placement="Bottom">
                        <Border x:Name="SubMenuBorder" BorderBrush="#FF999999" BorderThickness="1" Background="#FFF0F0F0" Padding="2">
                            <ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
                                <Grid RenderOptions.ClearTypeHint="Enabled">
                                    <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
                                        <Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=SubMenuBorder}" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/>
                                    </Canvas>
                                    <!--<Rectangle Fill="#FFD7D7D7" HorizontalAlignment="Left" Margin="29,2,0,2" Width="1"/>-->
                                    <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/>
                                </Grid>
                            </ScrollViewer>
                        </Border>
                    </Popup>
                </Grid>
            </Border>
            <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="IsHighlighted" Value="True">
                    <Setter Property="Background" TargetName="templateRoot" Value="#3D26A0DA"/>
                    <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FF26A0DA"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="#FF707070"/>
                    <Setter Property="Fill" TargetName="GlyphPanel" Value="#FF707070"/>
                </Trigger>
                <Trigger Property="CanContentScroll" SourceName="SubMenuScrollViewer" Value="False">
                    <Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=SubMenuScrollViewer}"/>
                    <Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=SubMenuScrollViewer}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Window.Resources>
    <Grid>
        <Menu>
            <MenuItem Header="One" Template="{DynamicResource MenuItemControlTemplate1}">
                <MenuItem Header="One-One" Template="{DynamicResource MenuItemControlTemplate1}"></MenuItem>
                <MenuItem Header="One-Two"></MenuItem>
                <MenuItem Header="One-Three"></MenuItem>
                <MenuItem Header="One-Four"></MenuItem>
                <MenuItem Header="One-Five"></MenuItem>
            </MenuItem>
            <MenuItem Header="Two">
                <MenuItem Header="Two-One"></MenuItem>
                <MenuItem Header="Two-Two"></MenuItem>
                <MenuItem Header="Two-Three"></MenuItem>
                <MenuItem Header="Two-Four"></MenuItem>
                <MenuItem Header="Two-Five"></MenuItem>
            </MenuItem>

        </Menu>
    </Grid>
Vivek Saurav
  • 2,235
  • 4
  • 25
  • 46
0

what worked for me is the following:

    <Menu>
    <MenuItem Header="_One">
        <MenuItem Header="_One-One"></MenuItem>
        <MenuItem Header="_One-Two"></MenuItem>
        <MenuItem Header="_One-Three"></MenuItem>
        <MenuItem Header="_One-Four"></MenuItem>
        <MenuItem Header="_One-Five"></MenuItem>
    </MenuItem>
    <MenuItem Header="_Two">
        <MenuItem Header="_Two-One"></MenuItem>
        <MenuItem Header="_Two-Two"></MenuItem>
        <MenuItem Header="_Two-Three"></MenuItem>
        <MenuItem Header="_Two-Four"></MenuItem>
        <MenuItem Header="_Two-Five"></MenuItem>
    </MenuItem>

</Menu>

placing a _ before the name makes it a hotkey CTRL + the header name, but mine are also nicely aligned.

Giellez
  • 146
  • 1
  • 7