分辨率独立WPF应用程序

CBr*_*eze 4 c# wpf layout xaml

我正在开发一个需要独立于分辨率的数据库系统,一些使用仍然以1024 x 768运行的屏幕,一些使用1920 x 1080的屏幕,而其他人使用其间的所有内容.

我之前没有做过很多与WPF的合作,所以我只是刚刚开始尝试让我的头围绕高度,宽度和路线.

我现在拥有的是一个主窗口,其中包含一个网格,其中顶部有一行标签和一些导航按钮,以及登录人员的时间和用户名.然后我有一秒钟下面的行,它包含一个框架,我将页面加载到程序的主导航中.

在页面中我主要使用网格布局,偶尔使用堆栈面板.我遇到的最大问题之一就是像这样的问题;

在此输入图像描述

在低分辨率下这是常见的,因为在更高的分辨率下按钮看起来很好;

在此输入图像描述

这是其父网格中按钮的XAML代码;

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Content="HR" Margin="10"  Click="RunHrSystem" FontSize="18.667" />
        <Button Content="Companies" Margin="10" Click="RunCompSystem" FontSize="18.667" Grid.Row="1" />
        <Button Content="People" Margin="10" Click="RunPeopleSystem" FontSize="18.667" Grid.Row="2" />
        <Button Content="IT Management" Margin="10" Click="RunITManagementSystem" FontSize="18.667" Grid.Row="3"/>
        <Button Content="Sales" Margin="10" FontSize="18.667" Grid.Row="4" />
        <Button Content="Buying" Margin="10" FontSize="18.667" Grid.Row="5" />
        <Button Content="Estimating" Margin="10" FontSize="18.667" Grid.Row="6"/>
        <Button Content="Design" Margin="10" FontSize="18.667" Grid.Row="7"/>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

有没有什么明显的我在这里做错了阻止按钮按照较低的分辨率调整大小?正如我所说,我在整个程序中使用按钮,以及矩形形状和某些情况下的标签,标签的底部也将被切断.

Mik*_*son 5

目前,您声明RowDefinitions要使用*,这告诉行使用高度作为可用空间的百分比.因此,如果您的分辨率发生变化,您的行高将会发生变化.

相反,您希望它RowDefinition内容的高度.在这种情况下,当分辨率改变时,行高度不会改变.

<RowDefinition Height="Auto"/>
Run Code Online (Sandbox Code Playgroud)

将网格放入a中是个好主意ScrollViewer,以防网格变得比屏幕大.

<ScrollViewer>
    <Grid>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        ...
Run Code Online (Sandbox Code Playgroud)

在您的特定示例中,我会改为使用StackPanel.

<ScrollViewer>
    <StackPanel>
        <Button ...
Run Code Online (Sandbox Code Playgroud)