背景:我的笔记本通常放在一个扩展底座上,上面连接着一个大屏幕。(WPF)应用程序的图标位于笔记本电脑屏幕上。Windows (7,64位)在笔记本显示器上打开应用程序,而不是在大显示器上。
我可以将图标移动到大显示器上,Windows将在该显示器上打开应用程序。但在启动没有连接到扩展底座的笔记本电脑后,图标又被放在笔记本电脑的显示器上(实际上我更喜欢把它放在小屏幕上)……
我找到了一些以编程方式设置应用程序主窗口位置的代码,请参阅How to set WPF window position in secondary display That works -但是:仅适用于主窗口。所有其他窗口都会在图标所在的屏幕上打开。
现在,我也可以为所有其他窗口指定位置。或者我可以编写一些代码来存储窗口关闭时的位置,同时记住屏幕(首选或其他),从而在窗口加载时根据可用屏幕重新设置它。
但这太夸张了:实际上,我只想指定窗口在大屏幕上的某个位置打开-我甚至不关心屏幕上的确切位置(Windows可以用现在的方式来确定)。
你能建议什么简单的解决方案?
发布于 2021-02-28 04:05:35
我建议你创建一个继承“窗口”类的新类,把你的代码放在新窗口中,然后在你所有的窗口中使用它。
示例:
using System.Windows;
namespace WpfApp2
{
public class Custom_Window_Class : Window
{
// Your code to reposition window (timer ...)
}
}=================================
<local:Custom_Window_Class x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</local:Custom_Window_Class>======================================
namespace WpfApp2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Custom_Window_Class
{
public MainWindow()
{
InitializeComponent();
}
}
}发布于 2021-03-01 16:44:20
不幸的是,我不得不触摸每一个窗口才能把事情做好--我想称之为WTF。
如果类型为System.Windows.Window,则必须设置Owner属性及其window.WindowStartupLocation = WindowStartupLocation.CenterOwner;。同样,它指定了比我想指定的更多的细节。
对于OpenFileDialog,必须在其ShowDialog方法中提供所有者;在其Show方法中提供MessageBox。
我认为对于这样一个简单的问题来说,它的代码太多了,并且必须指定比我实际想要指定的更多的代码。最后,许多WPF问题最终变成了WPF。
https://stackoverflow.com/questions/66399767
复制相似问题