본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF & C# - WindowStyle.None + Resize 꼭! 주의하자 ( WindowStyle.None / 윈도우 / Window / 반투명 / CanResize / ActualWidth / ActualHeight / 리사이즈 / 사이즈 / 전체화면 / 최대화 / 풀스크린 / FullScreen )

728x90
반응형


 WPF & C# -  WindowStyle.None + Resize 꼭! 주의하자 ( WindowStyle.None 윈도우 / Window / 반투명 / CanResize / ActualWidth / ActualHeight / 리사이즈 / 사이즈 / 전체화면 / 최대화 / 풀스크린 / FullScreen )


관련글



ReSizeMode.zip




지금 투명창윈도우를 사용하는 프로그램을 만들고 있다.


그런데... 뭔가 사이즈가 조금씩 어긋나기 시작을 했다.


어디서 부터일까?


문제는 WindowStyle.None + ResizeMode~!!! ( 윈도우None 과 리사이즈모드 )




    WindowStyle = WindowStyle.None;

    ResizeMode = ResizeMode.NoResize;



참고로 ResizeMode 를 따로 설정하지 않으면 CanResize 모드이다.


사이즈 체크를 위해서 아래와 같이 코드를 짰고, 테스트 결과물이다.


Windows 의 Width 와 Height 가 300일때

Grid 의 ActualWidth 와 ActualHeight는 286 이다.


일반적으로 14의 사이즈가 빠진다. ( 아마도 윈도우 테두리, 크롬 사이즈가 빠지는 것이 아닐까 추측해본다. )


여튼 항상 grid286 이던것이 아래상황에서는 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






728x90
반응형