WPF 自定义标题栏: 拖拉缩放窗口指南

在 WPF 应用程序中,您可以自定义标题栏,实现更灵活的窗口操控体验,例如拖拉和缩放。以下是实现自定义标题栏拖拉缩放的步骤:

  1. 定义自定义标题栏控件: 创建一个 UserControl,包含标题文本、最小化、最大化和关闭按钮。
  2. 添加鼠标事件处理程序: 在自定义标题栏控件中添加鼠标事件处理程序,实现拖动和缩放窗口的功能。
  3. 设置窗口样式: 将窗口的边框和标题栏设置为 None,并设置窗口的缩放边框厚度。
  4. 添加自定义标题栏: 将自定义标题栏控件添加到窗口中,并将其放置在窗口的顶部。

示例代码

以下示例代码展示了如何创建一个自定义标题栏,并实现拖拉和缩放窗口功能:

CustomTitleBar.xaml:

<UserControl x:Class='CustomTitleBar'>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width='*' />
            <ColumnDefinition Width='Auto' />
        </Grid.ColumnDefinitions>
        <TextBlock Text='Title' VerticalAlignment='Center' />
        <StackPanel Grid.Column='1' Orientation='Horizontal'>
            <Button Content='_&#x20;' Margin='5 0' Click='MinimizeButton_Click' />
            <Button Content='□' Margin='5 0' Click='MaximizeButton_Click' />
            <Button Content='X' Margin='5 0' Click='CloseButton_Click' />
        </StackPanel>
    </Grid>
</UserControl>

CustomTitleBar.xaml.cs:

public partial class CustomTitleBar : UserControl
{
    public CustomTitleBar()
    {
        InitializeComponent();
    }

    private void MinimizeButton_Click(object sender, RoutedEventArgs e)
    {
        Window.GetWindow(this).WindowState = WindowState.Minimized;
    }

    private void MaximizeButton_Click(object sender, RoutedEventArgs e)
    {
        Window window = Window.GetWindow(this);
        if (window.WindowState == WindowState.Maximized)
        {
            window.WindowState = WindowState.Normal;
        }
        else
        {
            window.WindowState = WindowState.Maximized;
        }
    }

    private void CloseButton_Click(object sender, RoutedEventArgs e)
    {
        Window.GetWindow(this).Close();
    }

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Window.GetWindow(this).DragMove();
    }

    private void Grid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        MaximizeButton_Click(sender, e);
    }
}

MainWindow.xaml:

<Window x:Class='MainWindow'
        Style='{StaticResource WindowStyle}'
        WindowStyle='None'>
    <Grid>
        <local:CustomTitleBar />
        <Grid>
            <!-- 窗口内容 -->
        </Grid>
    </Grid>
</Window>

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

WindowStyle.xaml:

<Style x:Key='WindowStyle' TargetType='{x:Type Window}'>
    <Setter Property='WindowChrome.WindowChrome'>
        <Setter.Value>
            <WindowChrome CaptionHeight='0' CornerRadius='0' GlassFrameThickness='1' NonClientFrameEdges='None' ResizeBorderThickness='5' UseAeroCaptionButtons='False' />
        </Setter.Value>
    </Setter>
</Style>

WindowStyle 中,我们设置了 WindowChrome 属性,将窗口的边框和标题栏去掉,并设置了窗口的缩放边框厚度为 5。

运行程序后,您将看到一个自定义标题栏,以及可拖拉和缩放的窗口。

WPF 自定义标题栏: 拖拉缩放窗口指南

原文地址: https://www.cveoy.top/t/topic/mThg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录