Проблемы управления меню (WPF) - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу создать масштабируемый элемент управления Menu в моем приложении. Я использовал этот ответ , чтобы создать масштабируемое окно, а затем вставил в него элемент управления Menu. У меня есть некоторые проблемы, и я не могу найти решение.

Как установить «центральную» вертикальную настройку для пунктов меню? Теперь они пристыкованы к вершине. Есть ли способы немного сдвинуть первый элемент (в моем случае «Файл») вправо?

И можно ли избежать обрезки панели меню при изменении размера окна? На данный момент, даже если я немного сдвину верхнюю границу внутренней сетки, панель меню будет разрезана наполовину.

Мой код и его результаты для полноэкранного и меньшего масштаба приведены ниже:

<Window x:Class="DigitalSteelCastingWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DigitalSteelCastingWPF"
        mc:Ignorable="d"
        Title="Digital Steel Casting"
        Name="myMainWindow"
        Height="1056" Width="1936"
        WindowStartupLocation="CenterScreen" WindowState="Maximized"
        FontSize="24"
        HorizontalAlignment="Center" VerticalAlignment="Center"
        WindowStyle="ThreeDBorderWindow">

    <Grid Name="MainGrid" SizeChanged="MainGrid_SizeChanged">

        <Grid.LayoutTransform>
            <ScaleTransform x:Name="ApplicationScaleTransform"
                        CenterX="0"
                        CenterY="0"
                        ScaleX="{Binding ElementName=myMainWindow, Path=ScaleValue}"
                        ScaleY="{Binding ElementName=myMainWindow, Path=ScaleValue}" />
        </Grid.LayoutTransform>

        <Grid VerticalAlignment="Center" HorizontalAlignment="Center" Height="1025" Width="1928">

            <StackPanel VerticalAlignment="Top">
                <Menu Width="Auto" Height="50" VerticalAlignment="Center" FontSize="24">
                    <MenuItem Header="_File">
                        <MenuItem x:Name="New" Header="_New" Height="50" HorizontalAlignment="Left" Width="250"/>
                        <MenuItem x:Name="Open" Header="_Open" Height="50" HorizontalAlignment="Left" Width="250"/>
                        <MenuItem x:Name="Exit" Header="_Exit" Height="50" HorizontalAlignment="Left" Width="250"/>
                    </MenuItem>
                    <MenuItem Header="_Tools">
                        <MenuItem x:Name="Options" Header="O_ptions" Height="50" HorizontalAlignment="Left" Width="250"/>
                    </MenuItem>
                </Menu>
            </StackPanel>

        </Grid>

    </Grid>

</Window>

1 Ответ

1 голос
/ 19 февраля 2020

Вы можете добавить Viewbox

 <Grid>
        ***<Viewbox Stretch="Fill">***
            <Grid VerticalAlignment="Center" HorizontalAlignment="Center"  Height="1025" Width="1928">

                <StackPanel VerticalAlignment="Top">
                    <Menu Width="Auto" Height="50" VerticalAlignment="Center" FontSize="24">
                        <MenuItem Header="_File">
                            <MenuItem x:Name="New" Header="_New" Height="50" HorizontalAlignment="Left" Width="250"/>
                            <MenuItem x:Name="Open" Header="_Open" Height="50" HorizontalAlignment="Left" Width="250"/>
                            <MenuItem x:Name="Exit" Header="_Exit" Height="50" HorizontalAlignment="Left" Width="250"/>
                        </MenuItem>
                        <MenuItem Header="_Tools">
                            <MenuItem x:Name="Options" Header="O_ptions" Height="50" HorizontalAlignment="Left" Width="250"/>
                        </MenuItem>
                    </Menu>
                </StackPanel>

            </Grid>
        ***</Viewbox>***
        <Grid.LayoutTransform>
            <ScaleTransform x:Name="ApplicationScaleTransform"
                        CenterX="0"
                        CenterY="0"
                        ScaleX="{Binding ElementName=myMainWindow, Path=ScaleValue}"
                        ScaleY="{Binding ElementName=myMainWindow, Path=ScaleValue}" />
        </Grid.LayoutTransform>


    </Grid>
...