最近做一个项目,里面涉及到了一些WPF的东西开发的节目,其中的一个小小功能就是让工具栏,这些东西都不难,有些东西可以在微软的基础之上来做,但是怎样工具栏像VS中的工具栏可以悬浮,可以收缩呢?于是开始了尝试的旅途。
first:既然可以停靠,那么我们就要有一个触发这个事件的Button
second: 既然可以显示停靠和收缩状态,则少不了图片的交替显示和控制变量 bool isExpand
third: 如果不是停靠,则可以通过鼠标的移动来触发工具栏的收缩,即鼠标移动,工具栏展开,鼠标移出,工具栏收缩
就这些东西够吗?差不多了,在来个容器吧!StackPanel足以。
#region 扩展与展开工具栏和属性栏
bool isExpend = true;//控制工具栏是否展开,True ,展开 ,false 关闭
/// <summary>
/// 控制工具栏是否展开 ,如果在添加其他的工具栏,只需要判断Button的名字,既可以在这里实现效果
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExpendOrClose_Click( object sender, RoutedEventArgs e)
{
if (isExpend)
{
ToolBox.Width = 1; //或设置工具栏隐藏
col1.MaxWidth = 25;
txbSpace.Width = 1; //这个是用来控制图片显示位置的东西
btnExpendOrClose.Background = new ImageBrush( new BitmapImage( new Uri( "../../Images/expand.jpg", UriKind.RelativeOrAbsolute)));
}
else
{
ToolBox.Width = 200;
col1.MaxWidth = 205; //控制容器的大小
txbSpace.Width = 205-25;
btnExpendOrClose.Background = new ImageBrush( new BitmapImage( new Uri( "../../Images/lock.jpg", UriKind.RelativeOrAbsolute)));
}
isExpend = !isExpend;
}
/// <summary>
/// 鼠标进入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StackPanel_MouseEnter( object sender, System.Windows.Input.MouseEventArgs e)
{
e.Handled = false;
if (!isExpend)
{
ToolBox.Width = 200;
col1.MaxWidth = 205;
txbSpace.Width = 205 - 25;
}
}
/// <summary>
/// 鼠标移出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StackPanel_MouseLeave( object sender, System.Windows.Input.MouseEventArgs e)
{
e.Handled = false;
if (!isExpend)
{
ToolBox.Width = 1;
col1.MaxWidth = 25;
txbSpace.Width = 1;
}
}
#endregion
/// 控制工具栏是否展开 ,如果在添加其他的工具栏,只需要判断Button的名字,既可以在这里实现效果
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExpendOrClose_Click( object sender, RoutedEventArgs e)
{
if (isExpend)
{
ToolBox.Width = 1; //或设置工具栏隐藏
col1.MaxWidth = 25;
txbSpace.Width = 1; //这个是用来控制图片显示位置的东西
btnExpendOrClose.Background = new ImageBrush( new BitmapImage( new Uri( "../../Images/expand.jpg", UriKind.RelativeOrAbsolute)));
}
else
{
ToolBox.Width = 200;
col1.MaxWidth = 205; //控制容器的大小
txbSpace.Width = 205-25;
btnExpendOrClose.Background = new ImageBrush( new BitmapImage( new Uri( "../../Images/lock.jpg", UriKind.RelativeOrAbsolute)));
}
isExpend = !isExpend;
}
/// <summary>
/// 鼠标进入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StackPanel_MouseEnter( object sender, System.Windows.Input.MouseEventArgs e)
{
e.Handled = false;
if (!isExpend)
{
ToolBox.Width = 200;
col1.MaxWidth = 205;
txbSpace.Width = 205 - 25;
}
}
/// <summary>
/// 鼠标移出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StackPanel_MouseLeave( object sender, System.Windows.Input.MouseEventArgs e)
{
e.Handled = false;
if (!isExpend)
{
ToolBox.Width = 1;
col1.MaxWidth = 25;
txbSpace.Width = 1;
}
}
#endregion
本文来自山石晓月的博客,原文地址:http://blog.sina.com.cn/s/blog_4c0e8aa20100rh04.html