WPF模拟可扩展的工具栏

来源:互联网 发布:杨辉三角java代码递归 编辑:程序博客网 时间:2024/06/05 09:16

 最近做一个项目,里面涉及到了一些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

本文来自山石晓月的博客,原文地址:http://blog.sina.com.cn/s/blog_4c0e8aa20100rh04.html