C# 根据监视器分辨率调整gui元素的大小
我正在开发一个C# 根据监视器分辨率调整gui元素的大小,c#,windows,visual-studio,resize,C#,Windows,Visual Studio,Resize,我正在开发一个C#应用程序,我遇到了以下问题: 现在,当我完成我的应用程序时,我尝试从不同的显示器上使用它,但我遇到了重新调整大小的问题。我有分组框、列表视图、标签、按钮等。我尝试将它们向下、向上、向左等固定。。我得到的最好的表现是将所有东西都固定在左边,因为我并不真正关心使它变大,它看起来很好,即使在23英寸的显示器上有一个最大化,问题是当我尝试缩小到低于其原始尺寸时: 表单开始收缩,滚动条出现,这样我就可以看到所有使用滚动条的表单(右-左,因为我的问题是宽度),这不是我希望它的工作方式 接
C#
应用程序,我遇到了以下问题:
现在,当我完成我的应用程序时,我尝试从不同的显示器上使用它,但我遇到了重新调整大小的问题。我有分组框、列表视图、标签、按钮等。我尝试将它们向下、向上、向左等固定。。我得到的最好的表现是将所有东西都固定在左边,因为我并不真正关心使它变大,它看起来很好,即使在23英寸的显示器上有一个最大化,问题是当我尝试缩小到低于其原始尺寸时:
- 表单开始收缩,滚动条出现,这样我就可以看到所有使用滚动条的表单(右-左,因为我的问题是宽度),这不是我希望它的工作方式
- 接下来我想展示的是,当a缩小到比它原来的尺寸小的时候,表格中的每一项都会变小,这样所有的东西都能放进去
- 自动缩放和自动调整大小对我不起作用,也许我没有很好地使用它
- 将顶部、左侧、右侧和底部固定在我将它们放在哪里的功能中,在生长时效果很好,但在收缩时,所有东西都位于其他项目的顶部(它们重叠)
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>
名称空间示例
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
this.SizeChanged+=窗口_SizeChanged;
}
LoginsScreen Screen 1=新的LoginsScreen)();
私有无效窗口\u KeyDown(对象发送方,KeyEventArgs e)
{
}
已加载私有无效窗口(对象发送器、路由目标)
{
mainFrame.addPage(屏幕1);
}
私有void setAppConfiguration()
{
}
私有无效窗口\u SizeChanged(对象发送方,SizeChangedEventArgs e)
{
//在更改windows大小时调用。在每个触发器上,我们在相应的屏幕上调用resize()。
屏幕1.调整大小();
}
}
}
名称空间示例。屏幕
{
///
///LoginPage.xaml的交互逻辑
///
公共部分类登录屏幕:第页
{
整数计数=0;
公共登录屏幕()
{
初始化组件();
}
public void resizePage()
{
//将所有yout UI逻辑放在resize上。。
errorlabel.Content=count+“”;
计数++;
}
}
}
WPF示例:
注意:未测试代码。它是如何在WPF应用程序中实现响应式UI的原型
WPF应用程序包含一个主窗口。此mainwidows包含多个页面,其中每个页面都是一个屏幕
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>
名称空间示例
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
this.SizeChanged+=窗口_SizeChanged;
}
LoginsScreen Screen 1=新的LoginsScreen)();
私有无效窗口\u KeyDown(对象发送方,KeyEventArgs e)
{
}
已加载私有无效窗口(对象发送器、路由目标)
{
mainFrame.addPage(屏幕1);
}
私有void setAppConfiguration()
{
}
私有无效窗口\u SizeChanged(对象发送方,SizeChangedEventArgs e)
{
//在更改windows大小时调用。在每个触发器上,我们在相应的屏幕上调用resize()。
屏幕1.调整大小();
}
}
}
名称空间示例。屏幕
{
///
///LoginPage.xaml的交互逻辑
///
公共部分类登录屏幕:第页
{
整数计数=0;
公共登录屏幕()
{
初始化组件();
}
public void resizePage()
{
//将所有yout UI逻辑放在resize上。。
errorlabel.Content=count+“”;
计数++;
}
}
}
问题解决了,应用程序没那么大,但我试过的显示器太旧了,截图了,我试过用一台更新的笔记本电脑,没问题,所以我不在乎我是否在每种显示器上工作(当上面的显示器很旧时)问题解决了,应用程序没那么大,但是我试过的显示器是旧的,并且裁剪了图片,我试过用一台更新的笔记本电脑,没关系,所以我不在乎我是否在每种显示器上工作(当上面的显示器是旧的时候)可能包括一些代码,因为你现在的问题非常广泛。我想这是一个WinForms应用程序。应该是WinForms。。。因为使用WPF您不会遇到这样的问题:)可能会包含一些代码,因为您现在的问题非常广泛。我猜这是一个WinForms应用程序。应该是WinForms。。。因为使用WPF不会遇到这样的问题:)