如何调整gridsplitters的高度,使其不会切断wpf应用程序顶部的菜单和工具栏?

beq87vna  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(122)

我在wpf应用程序的顶部有两个网格行。菜单和工具栏。当我使用网格分割器时,它会同时切断菜单和工具栏。我想调整gridsplitter的高度,使它考虑到两个网格行的高度,并设置在工具栏的正下方。我该怎么办?下面是我的代码和问题的图片。


的数据

<Window x:Class="M4aToMP3.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:M4aToMP3"
        mc:Ignorable="d"
        Title="M4aToMP3" Height="600" Width="800" WindowStartupLocation="CenterScreen">

    <Grid Name="gridMain" ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="22"></RowDefinition>
            <RowDefinition Height="40"></RowDefinition>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="240"></ColumnDefinition>
            <ColumnDefinition Width="5"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <GridSplitter Name="gridSplitterMain" Grid.Column="1" HorizontalAlignment="Stretch" Width="5"/>
        
        <Menu Name="menuMain" Grid.Row="0">
            <MenuItem Header="_File"></MenuItem>
            <MenuItem Header="_Edit"></MenuItem>
            <MenuItem Header="_View"></MenuItem>
            <MenuItem Header="_Help"></MenuItem>
        </Menu>

        <ToolBarTray Grid.Row="1">
            <ToolBar Name="toolBarMain" Height="40">
                <Button>
                    <Image Source="icons8-audio-file-32.png"></Image>
                </Button>
                <Button>
                    <Image Source="icons8-music-folder-32.png"></Image>
                </Button>
            </ToolBar>
        </ToolBarTray>
    </Grid>
</Window>

字符串
我读了很多关于gridsplitter控件的文章,尝试了很多不同的设置,但我还没有找到解决方案。

6yoyoihd

6yoyoihd1#

最简单的方法是根本不处理MenuToolBarTray。用DockPanel或外部Grid组织它们。
下面是一个使用DockPanel的示例

<Window x:Class="WpfApp.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:local="clr-namespace:WpfApp"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="800"
        Height="450"
        mc:Ignorable="d">
    <DockPanel>
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="_File" />
            <MenuItem Header="_Edit" />
            <MenuItem Header="_View" />
            <MenuItem Header="_Help" />
        </Menu>
        <ToolBarTray DockPanel.Dock="Top">
            <ToolBar Height="40">
                <Button>
                    <Image Source="icons8-audio-file-32.png" />
                </Button>
                <Button>
                    <Image Source="icons8-music-folder-32.png" />
                </Button>
            </ToolBar>
        </ToolBarTray>
        <Grid ShowGridLines="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="240" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <GridSplitter Grid.Column="1"
                          Width="5"
                          ResizeBehavior="PreviousAndNext" />
        </Grid>
    </DockPanel>
</Window>

字符串
现在GridSplitter只影响它应该影响的网格列。

kdfy810k

kdfy810k2#

DockPanel可以这样使用

<DockPanel>
    <Grid Name="gridMain" ShowGridLines="True" 
          DockPanel.Dock="Top">
        <Grid.RowDefinitions>
            <RowDefinition Height="22"></RowDefinition>
            <RowDefinition Height="40"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="240"></ColumnDefinition>
            <ColumnDefinition Width="5"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <GridSplitter Name="gridSplitterMain" Grid.Column="1" 
                      Grid.RowSpan="2" HorizontalAlignment="Stretch" Width="5"/>

        <Menu Name="menuMain" Grid.Row="0">
            <MenuItem Header="_File"></MenuItem>
            <MenuItem Header="_Edit"></MenuItem>
            <MenuItem Header="_View"></MenuItem>
            <MenuItem Header="_Help"></MenuItem>
        </Menu>

        <ToolBarTray Grid.Row="1">
            <ToolBar Name="toolBarMain" Height="40">
                <Button>
                    <Image Source="icons8-audio-file-32.png"></Image>
                </Button>
                <Button>
                    <Image Source="icons8-music-folder-32.png"></Image>
                </Button>
            </ToolBar>
        </ToolBarTray>

    </Grid>
    <Grid Name="gridContent">

    </Grid>
</DockPanel>

字符串

相关问题