WPF 自定义标题栏: 拖拉缩放窗口指南
WPF 自定义标题栏: 拖拉缩放窗口指南
在 WPF 应用程序中,您可以自定义标题栏,实现更灵活的窗口操控体验,例如拖拉和缩放。以下是实现自定义标题栏拖拉缩放的步骤:
- 定义自定义标题栏控件: 创建一个 UserControl,包含标题文本、最小化、最大化和关闭按钮。
- 添加鼠标事件处理程序: 在自定义标题栏控件中添加鼠标事件处理程序,实现拖动和缩放窗口的功能。
- 设置窗口样式: 将窗口的边框和标题栏设置为
None,并设置窗口的缩放边框厚度。 - 添加自定义标题栏: 将自定义标题栏控件添加到窗口中,并将其放置在窗口的顶部。
示例代码
以下示例代码展示了如何创建一个自定义标题栏,并实现拖拉和缩放窗口功能:
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='_ ' 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。
运行程序后,您将看到一个自定义标题栏,以及可拖拉和缩放的窗口。
原文地址: https://www.cveoy.top/t/topic/mThg 著作权归作者所有。请勿转载和采集!