마우스 커서로 WPF 창을 최대화하려면 어떻게 해야 합니까?
Window Startup Location 속성의 MSDN 매뉴얼에 따라 다음 절차를 수행합니다.
CenterScreen을 설정하면 마우스 커서가 포함된 화면 중앙에 창이 배치됩니다.
CenterScreen 필드의 MSDN 문서 자체는 다음과 같이 명확하게 정의하지 않습니다.
창의 시작 위치는 창이 열리는 화면 중앙입니다.
간단한 테스트에서는 이것이 정상적으로 동작하고 있는 것을 알 수 있습니다.
Main Window.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>
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();
}
}
}
듀얼 모니터 시스템에서 테스트하면 버튼을 클릭하면 새 창이 마우스 커서가 있는 화면 중앙에 표시됩니다.그게 바로 작동 방식이야
그러나 창을 표시하기 전에 최대화하도록 설정하면 새 창은 응용 프로그램을 실행한 디스플레이에서만 최대화됩니다.button_클릭 이벤트핸들러를 다음과 같이 변경하여 의미를 확인합니다.
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.WindowState = WindowState.Maximized;
window.Show();
}
이제 마우스 커서가 버튼을 클릭할 때 어디에 있든 응용 프로그램이 실행되는 화면에서만 창이 최대화됩니다.창을 표시한 후 창 상태를 최대값으로 설정하면 CenterScreen이 올바르게 작동합니다.이는 사용자가 창을 최대화하는 것과 같습니다.예:
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Show();
window.WindowState = WindowState.Maximized;
}
물론 여기서의 문제는 윈도우를 표시한 후 최대화하려면 시간이 더 오래 걸리고 내 앱과 같은 앱에서는 윈도우가 즉시 제자리로 들어가야 한다는 것입니다.
해결책을 아는 사람?
XAML로 설정할 수 있습니다.
<Window Height="300" Width="300" WindowState="Maximized">
</Window>
SizeToContent를 수동으로 설정해야 합니다.자세한 내용은 다른 답변을 참조하십시오.
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();
}
또, Microsoft 에 이 문제에 관한 버그 리포트를 제출하고 있습니다.
창부터 시작하여 XAML 마크업에 다음과 같이 추가하여 최대화할 수 있습니다.
<Window Height="300" Width="300"
WindowState="Maximized"
SizeToContent="Manual">
</Window>
속성 WindowState는 SizeToContent의 하위 항목입니다. 즉, 실제 최대화를 원하는 경우 후자의 Manual을 설정해야 합니다.또한 SizeToContent를 높이 또는 너비로 설정할 수 있습니다(한 차원에서는 창을 최대화하고 다른 차원에서는 컨트롤의 크기를 기반으로 계산된 크기를 따르는 경우).
<Window Height="300" Width="300"
WindowState="Maximized"
SizeToContent="Width">
</Window>
위의 경우 창 스팬이 위에서 아래로 이동하지만 반드시 왼쪽에서 오른쪽 가장자리로 이동하지는 않습니다.키 조합 ++ShiftUp 를 누르는 것과 같습니다.
SizeToContent가 SizeToContent로 설정되어 있는지 확인합니다.수동, 그렇지 않으면 작동하지 않을 거야.
언급URL : https://stackoverflow.com/questions/3121900/how-can-i-make-a-wpf-window-maximized-on-the-screen-with-the-mouse-cursor
'source' 카테고리의 다른 글
부호화를 수동으로 지정하지 않고 C# 내의 문자열을 일관된 바이트 형식으로 표시하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
---|---|
PropertyChanged 이벤트는 항상 null입니다. (0) | 2023.04.19 |
WPF의 페이지 로드 시 콤보 상자에 기본 텍스트 "--Select Team --"을 표시하는 방법 (0) | 2023.04.19 |
한 열에서 구별 선택 (0) | 2023.04.19 |
MS Word 테이블을 Excel 시트로 내보내기 위한 매크로 (0) | 2023.04.19 |