WPFアプリでタイトルバーの最小化、最大化、閉じるを消す方法

WPFアプリのタイトルバーを消す方法は私が知っているものだと2つあります。

今回はその2つを紹介します。

SetWindowLongを使う

参考にしたサイトはこちらです。

https://kuwayoshi.com/cswpf217

コードビハインドでSetWindowLongを使用します。

public partial class MainWindow : Window
{
    [DllImport("user32.dll")]
    private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

    [DllImport("user32.dll")]
    private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

    const int GWL_STYLE = -16;
    const int WS_SYSMENU = 0x80000;

    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);
        IntPtr handle = new WindowInteropHelper(this).Handle;
        int style = GetWindowLong(handle, GWL_STYLE);
        style = style & (~WS_SYSMENU);
        SetWindowLong(handle, GWL_STYLE, style);
    }

    public MainWindow()
    {
        InitializeComponent();
    }
}

このように表示されます。

SetWindowLongにセットする値を変更すれば最小化ボタンだけを有効にしないなどカスタマイズが可能です。

SetWindowLongについて

https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowlonga

xamlでタイトルバーを編集する方法

xaml

<Window x:Class="App.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"
        WindowStyle='None'
        AllowsTransparency='True'
        Background='Transparent'
        Title=''
        Height='200'
        Width='300'>
    <Grid>
        <Border Background='White' >
            <HeaderedContentControl>
                <HeaderedContentControl.Header>
                    <Grid MouseDown='OnDragMoveWindow'>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width='*' />
                            <ColumnDefinition Width='Auto' />
                        </Grid.ColumnDefinitions>

                        <Rectangle Grid.ColumnSpan='2'
                                   Fill='Gray' />

                        <TextBlock Grid.Column='0'
                                   FontSize='15'
                                   Foreground="White"
                                   VerticalAlignment='Center'
                                   Margin="5"
                                   Text='MainWindow CustomBar' />
                    </Grid>
                </HeaderedContentControl.Header>
            </HeaderedContentControl>
        </Border>
    </Grid>
</Window>

コードビハインド

public MainWindow()
{
    InitializeComponent();
}

private void WindowCloseButton_Click(object sender, RoutedEventArgs e)
{
    Close();
}

private void OnDragMoveWindow(object sender, MouseButtonEventArgs e)
{
    DragMove();
}

このように表示されます。

こちらの方法だと自由度が高い印象です。

お好みの方法を使ってみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA