WPF模拟可扩展的工具栏

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

在Windows Presentation Foundation (WPF)中创建一个模拟Autodesk AutoCAD工具栏的过程通常涉及自定义用户界面控件、数据绑定和事件处理。以下是基本步骤: 1. **创建用户界面布局**: 使用XAML(一种声明式的UI设计语言),你可以定义一个新的UserControl或Window作为你的工具栏。这将包括一组按钮、文本框或其他UI元素,用于显示工具选项。 ```xml <Window x:Class="YourNamespace.ToolBar" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <!--在这里添加各种按钮和图标控件--> <Button Content="工具1" /> <Button Content="工具2" /> <!--...更多控件定义...--> </Grid> </Window> ``` 2. **数据绑定和命令**: 每个工具按钮可以绑定到一个Command对象,代表它所执行的功能。你可以使用`System.Windows.Input`中的`ICommand`接口或`MVVM(Model-View-ViewModel)模式`中的`RelayCommand`来进行操作关联。 ```csharp public class ToolBarViewModel : ViewModelBase { public ICommand Tool1Command { get; set; } // 添加其他命令... } // 在代码背后实现命令 public class Tool1Command : ICommand { private bool _canExecute; private Action _executeAction; // 实现CanExecute和Execute方法 } ``` 3. **事件处理和功能实现**: 当用户点击按钮时,需要在对应的视图模型中响应Command的CanExecute和Execute事件。这通常是通过将Command属性绑定到按钮的Click事件触发的。 4. **集成至AutoCAD**: 虽然WPF本身不直接支持AutoCAD,但你可以创建一个WPF窗体,并通过插件技术(如.NET Framework的ActiveX或COM Interop)将其嵌入到AutoCAD环境中作为一个独立的对话框或者工具条。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值