C#/WinUI3

[WinUI3] 창 테두리 없애기, Title, Icon... 그리고 TitleBar.

말하는 닭 2023. 2. 5. 08:18

1. 테두리 없애기

wpf에서는 xaml에 편리하게 없앨 수 있었던 테두리.

뭐.. 그렇다고 winui3에서 막 복잡하다는 건 아니지만...

뭔갈 더 설정해줘야 한다.

 

public MainWindow() {
    this.InitializeComponent();  
    GetAppWindowAndPresenter();
    
    _appWindow.Resize(new Windows.Graphics.SizeInt32(600, 600));
    _presenter.SetBorderAndTitleBar(false, false);
}

private AppWindow _appWindow;
private OverlappedPresenter _presenter;

public void GetAppWindowAndPresenter() {
    var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
    WindowId myWndId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd);
    _appWindow = AppWindow.GetFromWindowId(myWndId);
    _presenter = _appWindow.Presenter as OverlappedPresenter;
}

SetBorderAndTitleBar의 첫번째 파라미터는 테두리를 가질거냐 말거냐,

두번째 파라미터는 타이틀 바를 가질거냐 말거냐인데..

위와 같이 둘 다 false값을 주면 잘 작동하지만, (false, true)로 주면 작동하지 않는다. 타이틀 바가 뭔지는 아직 잘 모르겠다.

 

어찌됐건 테두리는 없어져서 나온다.

 

 

2. 창의 제목 , 아이콘 설정하기

위의 코드를 가져온 후, Title을 설정해주면 된다.

아이콘은 SetIcon() 함수를 사용하면 된다. 이때, 아이콘은 ico 확장자만 사용할 수 있다.

(png로 해봤는데 안된다)

public MainWindow() {
    this.InitializeComponent();
    
    GetAppWindowAndPresenter();

    _appWindow.Title = "안녕하세요!"
    _appWindow.SetIcon("Images/icon.ico");
}

 

2번의 결과, 제목과 아이콘이 바뀐 것을 볼 수 있다.


2023.02.05 21:49 추가 작성

 

TitleBar가 한국어로 하면 제목표시줄인데.. 

public MainWindow() {
    this.InitializeComponent();  
    GetAppWindowAndPresenter();
    titleBar = _appWindow.TitleBar;
    titleBar.BackgroundColor = Colors.Red;
}

private AppWindowTitleBar titleBar;

titlebar속성이 있길래 건들여봤더니, 안 바뀐다. 

찾아보니 윈도우 10에서는 타이틀바 속성을 건들 수 없다고 써있긴 하다.

 

다른 방법이 없을까하다가 

Window.Current.SetTitleBar(customTitleBar);

요것도 있길래 해봤지만 요건 예외처리 안됐다면서 빠꾸.

사실 될 수도 있는건데 내 코딩 실력의 부족일 수도 있다는 생각이 들었다.

행여 이 글을 보고 계신 분들께.

이 글을 보고 바로 안된다고 단정짓지 마시고, 도전해보신 후에 저 좀 가르쳐주세요..