WPF & C# - WindowStyle.None + Resize 꼭! 주의하자 ( WindowStyle.None / 윈도우 / Window / 반투명 / CanResize / ActualWidth / ActualHeight / 리사이즈 / 사이즈 / 전체화면 / 최대화 / 풀스크린 / FullScreen ) |
관련글
지금 투명창윈도우를 사용하는 프로그램을 만들고 있다.
그런데... 뭔가 사이즈가 조금씩 어긋나기 시작을 했다.
어디서 부터일까?
문제는 WindowStyle.None + ResizeMode~!!! ( 윈도우None 과 리사이즈모드 )
WindowStyle = WindowStyle.None;
ResizeMode = ResizeMode.NoResize;
참고로 ResizeMode 를 따로 설정하지 않으면 CanResize 모드이다.
사이즈 체크를 위해서 아래와 같이 코드를 짰고, 테스트 결과물이다.
Windows 의 Width 와 Height 가 300일때
Grid 의 ActualWidth 와 ActualHeight는 286 이다.
일반적으로 14의 사이즈가 빠진다. ( 아마도 윈도우 테두리, 크롬 사이즈가 빠지는 것이 아닐까 추측해본다. )
여튼 항상 grid가 286 이던것이 아래상황에서는 300 표시가 되는 것이다.
WindowStyle.None + NoResize
WindowStyle.None + CanMinimize
해결방안
상단의 Chorme 사이즈가 빠지는 것이 맞다.
해결방안은 this.AllowsTransparency = true; 해주는 것이다.
WindowStyle = WindowStyle.None;
AllowsTransparency = true;
상단의 Chorme 사이즈가 빠지는 것이 맞다.
해결방안은 this.AllowsTransparency = true; 해주는 것이다.
아래는 테스트를 위해서 코드를 짜본것이다.
MainWindow.xaml
1 2 3 4 5 6 7 | <Grid x:Name="grid1" Background="LightSkyBlue"> <StackPanel> <Button x:Name="btn" Content="Size Check" Margin="5" Click="btn_Click" Height="50" Width="150" FontWeight="Bold" FontSize="20"/> <Label x:Name="lbl" Content="Label" Margin="5" FontWeight="Bold" FontSize="16" Foreground="#FFCB2020"/> <Label x:Name="lbl1" Content="Label" Margin="5" FontWeight="Bold" FontSize="16"/> </StackPanel> </Grid> | cs |
MainWindow.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public MainWindow() { InitializeComponent(); WindowStyle = WindowStyle.None; ResizeMode = ResizeMode.NoResize; } int i = 0; private void btn_Click(object sender, RoutedEventArgs e) { i++; if (i % 4 == 0) ResizeMode = ResizeMode.NoResize; if (i % 4 == 1) ResizeMode = ResizeMode.CanMinimize; if (i % 4 == 2) ResizeMode = ResizeMode.CanResize; if (i % 4 == 3) ResizeMode = ResizeMode.CanResizeWithGrip; lbl.Content = "ResizeMode = " + ResizeMode; lbl1.Content = "This.Width = " + this.Width + "\n"; lbl1.Content += "This.ActualWidth = " + this.ActualWidth + "\n" + "\n"; lbl1.Content += "Grid ActualWidth = " + grid1.ActualWidth + "\n"; lbl1.Content += "Grid ActualHeight = " + grid1.ActualHeight; } | cs |