通过Grid模拟实现一个标题栏:
<Grid Name="gridTitleBar" Grid.Row="0">
<Grid.Background>
<ImageBrush ImageSource="pack://application:,,,/images/banner.jpg" Stretch="Fill" TileMode="None" />
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Margin="4" Source="pack://application:,,,/images/cmbc.gif" HorizontalAlignment="Left" />
<Label Grid.Column="1" Content="人脸采集系统" FontSize="48" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" FontFamily="STCaiyun" Margin="4" Foreground="White"></Label>
<StackPanel Grid.Column="2" Margin="4" FlowDirection="RightToLeft" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Click="CloseButton_Click" Margin="2,0" ToolTip="关闭">
<Image Source="pack://application:,,,/images/close.png"></Image>
</Button>
<Button Click="MinimizeButton_Click" Margin="2,0" ToolTip="最小化">
<Image Source="pack://application:,,,/images/minimize.png"></Image>
</Button>
</StackPanel>
</Grid>
在代码中重写OnMouseLeftButtonDown函数:
// 支持标题栏拖动
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
// 获取鼠标相对标题栏位置
Point position = e.GetPosition(gridTitleBar);
// 如果鼠标位置在标题栏内,允许拖动
if (e.LeftButton == MouseButtonState.Pressed)
{
if (position.X >= 0 && position.X < gridTitleBar.ActualWidth && position.Y >= 0 && position.Y < gridTitleBar.ActualHeight)
{
this.DragMove();
}
}
}
程序界面: