分辨率独立WPF应用程序

时间:2015-10-28 11:11:27

标签: c# wpf xaml layout

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

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

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

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

enter image description here

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

enter image description here

这是其父网格中按钮的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>

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

2 个答案:

答案 0 :(得分:5)

目前,您宣布RowDefinitions使用*,这会告诉该行使用高度作为可用空间的百分比。因此,如果您的分辨率发生变化,您的行高会发生变化。

相反,您希望RowDefinition成为内容的高度。在这种情况下,当分辨率发生变化时,行高不会改变。

<RowDefinition Height="Auto"/>

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

<ScrollViewer>
    <Grid>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        ...

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

<ScrollViewer>
    <StackPanel>
        <Button ...

答案 1 :(得分:1)

我认为隐藏不可见区域中的现有按钮是一种不好的做法。用户应滚动以访问底部按钮。如果您需要支持低分辨率显示器,应用程序应调整到当前分辨率。 我想最好的方法是减少边距,为RowDefinitions设置*并限制网格高度以防止巨大的拉伸。