Ebe*_*eer 44 .net wpf multiple-monitors maximize windowstate
根据WindowStartupLocation属性的MSDN文档:
设置CenterScreen会使窗口位于包含鼠标光标的屏幕中央.
虽然CenterScreen字段的MSDN文档本身定义得不那么明确:
窗口的启动位置是打开它的屏幕的中心.
一个简单的测试显示这应该工作:
MainWindow.xaml
<Window x:Class="CenterScreenTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Click="button_Click">Open Window</Button>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs
using System.Windows;
namespace CenterScreenTest
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果在双监视器系统上测试它,您可以看到当您单击按钮时,新窗口将位于鼠标光标所在的屏幕上.这正是它应该如何运作的.
但是,如果在显示窗口之前尝试将窗口设置为最大化,则新窗口将仅在启动应用程序的显示器上最大化.将button_Click事件处理程序更改为以下内容以查看我的意思:
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.WindowState = WindowState.Maximized;
window.Show();
}
Run Code Online (Sandbox Code Playgroud)
现在,无论单击按钮时鼠标光标在哪里,窗口都只会在启动应用程序的屏幕上最大化.如果在显示窗口状态后将其设置为最大化,则CenterScreen可正常工作.这相当于用户最大化窗口.例如:
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Show();
window.WindowState = WindowState.Maximized;
}
Run Code Online (Sandbox Code Playgroud)
当然,这里的问题是,在显示窗口之后最大化窗口需要更长的时间,并且在诸如我的应用程序中,窗口需要立即弹出到位.
有人知道解决方案吗?
Art*_*luk 81
您可以在XAML中进行设置
<Window Height="300" Width="300" WindowState="Maximized">
</Window>
Run Code Online (Sandbox Code Playgroud)
您需要将SizeToContent设置为Manual.请参阅其他答案了解详情
Ebe*_*eer 42
我在MSDN WPF论坛上问了同样的问题,得到了这个很棒的解决方法的答案:
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.SourceInitialized += (s, a) => window.WindowState = WindowState.Maximized;
window.Show();
}
Run Code Online (Sandbox Code Playgroud)
我还向Microsoft 提交了一份关于此问题的错误报告,他们目前正在审核这些报告.
从窗口最大化开始,可以通过对 XAML 标记进行以下添加来实现。
<Window Height="300" Width="300"
WindowState="Maximized"
SizeToContent="Manual">
</Window>
Run Code Online (Sandbox Code Playgroud)
属性WindowState从属于SizeToContent,这意味着您需要设置后者Manual(如果您希望实际最大化)。您还可以将SizeToContent设置为Height或Width(如果您希望在一个维度上最大化窗口,而遵守基于另一个维度中控件大小计算的大小)。
<Window Height="300" Width="300"
WindowState="Maximized"
SizeToContent="Width">
</Window>
Run Code Online (Sandbox Code Playgroud)
以上将使窗口从上到下跨越,但不一定从左到右边缘。它相当于按下组合键Win+ Shift+ Up。
| 归档时间: |
|
| 查看次数: |
61974 次 |
| 最近记录: |