【问题标题】:Resize gui elements based on monitor resolution根据显示器分辨率调整 gui 元素的大小
【发布时间】:2016-02-17 08:17:56
【问题描述】:

我正在开发一个C# 应用程序,但我遇到了这个问题:

现在,当我完成我的应用程序时,我尝试在不同的显示器上使用它,但我遇到了重新调整大小的问题。我有分组框、列表视图、标签、按钮等。我尝试将它们锚定向下、向上、向左等。通过将所有内容锚定到左侧,我得到了最好的行为,因为我并不真正关心让它比它更大就是,即使在 23' 显示器上最大化,它看起来也不错,问题是当我尝试缩小到低于原始尺寸时:

  • 表单开始缩小并出现滚动,因此我可以看到所有使用滚动的表单(右 - 左,因为在我的情况下问题在于宽度),这不是我希望它工作的方式

  • 接下来我想出现的东西,当缩小到低于原来的尺寸时,表格中的每个项目都会变小,这样所有的东西都会适合

  • autoscaling 和 autosize 对我不起作用,也许我没有很好地使用它..

  • 锚定顶部、左侧、右侧、底部的功能,在生长时我将它们放置在哪里效果很好,但是当我缩小时,所有东西都在其他项目之上(它们重叠)

那么,伙计们,你们有什么想法或解决方案来解决我在调整大小时如何获得漂亮的缩放比例吗?

【问题讨论】:

  • 可能包含一些代码,因为您现在的问题非常广泛。
  • 我猜这是一个 WinForms 应用程序。应该是 WinForms... 因为使用 WPF 不会有这样的麻烦 :)

标签: c# windows visual-studio resize


【解决方案1】:

WPF 示例:

注意:代码未经测试。它是如何在 WPF 应用程序中实现响应式 UI 的原型。

WPF 应用程序包含一个 MainWindow。这个 mainwidows 包含 Pages,其中每一页是一个 Screen。

namespace Example
{
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.SizeChanged += window_SizeChanged;
    }
    LoginScreen screen1= new LoginScreen)();
    private void Window_KeyDown(object sender, KeyEventArgs e)
    {           


    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        mainFrame.addPage(screen1);
    }

    private void setAppConfiguration()
    {

    }
    private void window_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        //Gets called when even windows size got changed. On each trigger we         are calling resize() on that respective screen.
        screen1.resize();
    }
}
}


<Window x:Class="Example.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:gif="http://wpfanimatedgif.codeplex.com"
     xmlns:toastinet="clr-namespace:ToastinetWPF;assembly=ToastinetWPF"
    Title="IGNITOR" Height="350" Width="525" Loaded="Window_Loaded" 
    Name="window"
WindowState="Maximized">
<Grid>
<Grid Name="maingrid" >
        <Grid Name="frameGrid"> 
            <Frame Name="mainFrame" />
        </Grid>                       
    </Grid>
</Grid>
</Window>




namespace Example.Screens
{
/// <summary>
/// Interaction logic for LoginPage.xaml
/// </summary>
public partial class LoginScreen : Page
{
    int count =0;
    public LoginScreen()
    {
        InitializeComponent();
    }

    public void resizePage()
    {
         //Put all yout UI Logic here on resize..
         errorlabel.Content = count + "";
         count++;
    }
}
}


<src:Page x:Class="Example.Screens"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:src="clr-namespace:Example.Screens"
  mc:Ignorable="d" 
  d:DesignHeight="600" d:DesignWidth="1200" Title="LoginPage">

<Grid>
    <Label Name="errorlabel" Content="Example"/>
</Grid>
</src:Page>

【讨论】:

    【解决方案2】:

    问题解决了,应用程序不是很大,但是我尝试的显示器很旧并且裁剪了图片,我从较新的笔记本电脑上尝试过,没关系,所以我不在乎我是否不工作每种类型的显示器(当上面是旧的时候)

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多