【问题标题】:Resolution Independent WPF Application独立于分辨率的 WPF 应用程序
【发布时间】:2015-10-28 11:11:26
【问题描述】:

我正在开发一个需要独立于分辨率的数据库系统,一些使用仍在 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>

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

【问题讨论】:

    标签: c# wpf xaml layout


    【解决方案1】:

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

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

    <RowDefinition Height="Auto"/>
    

    最好将网格放在ScrollViewer 中,以防网格变得比屏幕大。

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

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

    <ScrollViewer>
        <StackPanel>
            <Button ...
    

    【讨论】:

    • 我现在遇到了最后两个按钮完全从网格中截断的情况。我想这就是你的意思,我应该把网格放在ScrollViewer 中?这是我可以解决这个问题的唯一方法吗?作为对此的另一个问题,是否有一种方法只在需要时显示ScrollViewer,即当按钮不完全适合屏幕时?
    • 我已经在这里简单地使用VerticalScrollBarVisibility="Auto"回答了我自己的问题
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多