标题栏的移动:
其实这部分还是很简单的,只需加一个(其他布局也可以),然后响应鼠标移动事件就好了。事件响应时的代码也非常简单,判断现在鼠标是否在按下状态,如果是,调用窗口移动命令。
<
Grid Name=
"titleBar"
VerticalAlignment=
"Top"
Height=
"40"
Background=
"#0F4378"
MouseMove=
"TitleBar_MouseMove">
< /Grid>
< /Grid>
鼠标移动时间响应:
public
void TitleBar_MouseMove(
object sender, MouseEventArgs e)
{
if(e.LeftButton == MouseButtonState.Pressed)
this.DragMove();
}
{
if(e.LeftButton == MouseButtonState.Pressed)
this.DragMove();
}
窗口按钮状态转换:
这里指的是普通,鼠标浮上,鼠标按下三种状态在同一张图片上,通过图片的偏移来实现转换。以最小化按钮为例:
<
Button Name=
"minBtn"
Width=
"34"
FocusVisualStyle=
"{x:Null}"
Click=
"MinBtn_Click">
< Button.Style>
< Style TargetType= "{x:Type Button}">
< Setter Property= "Background">
< Setter.Value>
< DrawingBrush Stretch= "Fill" TileMode= "Tile" Viewport= "0,0,3,1" Viewbox= "0,0,1,1">
< DrawingBrush.Drawing>
< ImageDrawing ImageSource= "res\btn_min.png" Rect= "0,0,1,1" />
< /DrawingBrush.Drawing>
< /DrawingBrush>
< /Setter.Value>
< /Setter>
< Setter Property= "Template">
< Setter.Value>
< ControlTemplate TargetType= "{x:Type Button}">
< Grid Background= "{TemplateBinding Background}">
< ContentPresenter VerticalAlignment= "Center" HorizontalAlignment= "Center" />
< /Grid>
< /ControlTemplate>
< /Setter.Value>
< /Setter>
< Style.Triggers>
< Trigger Property= "IsMouseOver" Value= "True">
< Setter Property= "Background">
< Setter.Value>
< DrawingBrush Stretch= "Fill" TileMode= "Tile" Viewport= "2,0,3,1" Viewbox= "0,0,1,1">
< DrawingBrush.Drawing>
< ImageDrawing ImageSource= "res\btn_min.png" Rect= "0,0,1,1" />
< /DrawingBrush.Drawing>
< /DrawingBrush>
< /Setter.Value>
< /Setter>
< /Trigger>
< Trigger Property= "IsPressed" Value= "True">
< Setter Property= "Background">
< Setter.Value>
< DrawingBrush Stretch= "Fill" TileMode= "Tile" Viewport= "1,0,3,1" Viewbox= "0,0,1,1">
< DrawingBrush.Drawing>
< ImageDrawing ImageSource= "res\btn_min.png" Rect= "0,0,1,1" />
< /DrawingBrush.Drawing>
< /DrawingBrush>
< /Setter.Value>
< /Setter>
< /Trigger>
< /Style.Triggers>
< /Style>
< /Button.Style>
< /Button>
< Button.Style>
< Style TargetType= "{x:Type Button}">
< Setter Property= "Background">
< Setter.Value>
< DrawingBrush Stretch= "Fill" TileMode= "Tile" Viewport= "0,0,3,1" Viewbox= "0,0,1,1">
< DrawingBrush.Drawing>
< ImageDrawing ImageSource= "res\btn_min.png" Rect= "0,0,1,1" />
< /DrawingBrush.Drawing>
< /DrawingBrush>
< /Setter.Value>
< /Setter>
< Setter Property= "Template">
< Setter.Value>
< ControlTemplate TargetType= "{x:Type Button}">
< Grid Background= "{TemplateBinding Background}">
< ContentPresenter VerticalAlignment= "Center" HorizontalAlignment= "Center" />
< /Grid>
< /ControlTemplate>
< /Setter.Value>
< /Setter>
< Style.Triggers>
< Trigger Property= "IsMouseOver" Value= "True">
< Setter Property= "Background">
< Setter.Value>
< DrawingBrush Stretch= "Fill" TileMode= "Tile" Viewport= "2,0,3,1" Viewbox= "0,0,1,1">
< DrawingBrush.Drawing>
< ImageDrawing ImageSource= "res\btn_min.png" Rect= "0,0,1,1" />
< /DrawingBrush.Drawing>
< /DrawingBrush>
< /Setter.Value>
< /Setter>
< /Trigger>
< Trigger Property= "IsPressed" Value= "True">
< Setter Property= "Background">
< Setter.Value>
< DrawingBrush Stretch= "Fill" TileMode= "Tile" Viewport= "1,0,3,1" Viewbox= "0,0,1,1">
< DrawingBrush.Drawing>
< ImageDrawing ImageSource= "res\btn_min.png" Rect= "0,0,1,1" />
< /DrawingBrush.Drawing>
< /DrawingBrush>
< /Setter.Value>
< /Setter>
< /Trigger>
< /Style.Triggers>
< /Style>
< /Button.Style>
< /Button>
同样实现窗口的最小化和关闭也比较容易:
private
void MinBtn_Click(
object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Minimized;
}
private void CloseBtn_Click( object sender, RoutedEventArgs e)
{
mainWindow.Close();
}
{
this.WindowState = WindowState.Minimized;
}
private void CloseBtn_Click( object sender, RoutedEventArgs e)
{
mainWindow.Close();
}
本文来自eilotyan的博客,原文地址:http://blog.youkuaiyun.com/eilotyan/archive/2011/06/08/6532917.aspx