wpf 自定义窗体 另一种实现方式
2013-01-29 16:21
330 查看
最初接触wpf时候做自定义的窗体 用来改变标题栏样式并支持拖动缩放,适用的事两个window 那种方式,网上有好多例子,但是后来觉得太麻烦了(每次都是以太麻烦为动力=。。=)
于是 找到了第二种方式 windowchrome
windowchrome 位于microsoft.windows.shell dll中是一个开源的库。
它的原理就是在窗体外面覆盖一层控件 其实和两个窗体的方案差不多。
上图:
其中主要要注意的有两点:
第一是 由于覆盖的问题会导致标题栏的按钮无法命中,可能导致选中或者触发不正确的问题,所以需要如下设置
第二 windowchrome 默认提供了几个命令 如最大化 最小化 关闭等 可以绑定。
就到这里了
于是 找到了第二种方式 windowchrome
windowchrome 位于microsoft.windows.shell dll中是一个开源的库。
它的原理就是在窗体外面覆盖一层控件 其实和两个窗体的方案差不多。
上图:
其中主要要注意的有两点:
第一是 由于覆盖的问题会导致标题栏的按钮无法命中,可能导致选中或者触发不正确的问题,所以需要如下设置
<Button shell:WindowChrome.IsHitTestVisibleInChrome="True" Style="{StaticResource CloseButtonStyle}" HorizontalAlignment="Right" Margin="0,0,25,0" Width="24" Height="24" Command="{x:Static shell:SystemCommands.CloseWindowCommand}" CommandParameter="{Binding ElementName=SelectDialog}"> </Button>
第二 windowchrome 默认提供了几个命令 如最大化 最小化 关闭等 可以绑定。
<Window.CommandBindings> <CommandBinding Command="{x:Static shell:SystemCommands.CloseWindowCommand}" Executed="_OnSystemCommandCloseWindow"/> </Window.CommandBindings> private void _OnSystemCommandCloseWindow(object sender, ExecutedRoutedEventArgs e) { SystemCommands.CloseWindow((Window)e.Parameter); }
就到这里了
相关文章推荐
- Wpf和WinForm在窗体中处理用户自定义消息的不同方式
- WPF自定义窗体的实现
- 06-android入门_listview采用系统和自定义的方式实现item
- Nib加载的方式实现自定义TableView
- WPF 调用API修改窗体风格实现真正的无边框窗体
- WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式
- 自定义Dialog的两种实现方式
- WPF 几行代码实现窗体毛玻璃效果(Aero Glass)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- 三种方式实现自定义圆形进度条ProgressBar
- WPF自适应窗体实现小结
- Android三种实现自定义ProgressBar的方式介绍
- WPF之自定义窗体
- 用java编程方式实现logback和log4j的自定义格式日志
- 两个Activity之间共享数据、互相访问的另一种方式的实现
- 综合应用WPF/WCF/WF/LINQ之三:采用用代码创建的方式实现CheckListBox的CustomControl
- android:最简单的方式实现自定义选择时间分钟间隔,非滚轮方式
- 用Spring Aop方式拦截自定义注解的实现
- 自定义表单的三种方式实现
- 【Android图像处理】实现镜面滤镜的另一种方式