WPF应用开发技巧
主界面定制开发
-
界面无边框样式应用
样式引用
在界面中引用已有的WindowStyle来实现界面无边框的样式
<Window x:Class="MvvmFoundationDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:v="clr-namespace:MvvmFoundationDemo.View" Title="MainWindow" Height="400" Width="620" Style="{StaticResource ResourceKey=NoResize_window}">
样式定义
也可以自己定义界面的样式,来实现界面样式个性化
<Style x:Key="NoResize_window" TargetType="{x:Type Window}"> <Setter Property="AllowsTransparency" Value="true"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="WindowStyle" Value="None"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Window}"> <Grid Margin="5"> <Rectangle Fill="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" RadiusX="3" RadiusY="3"> <Rectangle.Effect> <DropShadowEffect BlurRadius="5" ShadowDepth="0" Color="#FFB0B0B0"/> </Rectangle.Effect> </Rectangle> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Margin}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" CornerRadius="3"> <ContentPresenter /> </Border> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
-
界面最大最小关闭设计
-
在MainWindow.xaml中定义最大最小关闭按钮样式及关联事件
<WrapPanel Grid.Column="1" Orientation="Horizontal" Background="Aqua" HorizontalAlignment="Right"> <Button Style="{StaticResource ResourceKey=WindowMinButtonStyle}" Click="WindowMinButtonClick" Width="20" Height="30"/> <Button Style="{StaticResource ResourceKey=WindowMaxButtonStyle}" Click="WindowMaxButtonClick" Width="20" Height="30"/> <Button Style="{StaticResource ResourceKey=WindowCloseButtonStyle}" Click="WindowCloseButtonClick" Width="20" Height="30"/> </WrapPanel>
-
在MainWindow.xaml.cs中定义对应的事件
private void WindowMinButtonClick(object sender, RoutedEventArgs e) { this.WindowState = WindowState.Minimized; } private void WindowMaxButtonClick(object sender, RoutedEventArgs e) { if (this.WindowState!=WindowState.Maximized) { this.WindowState = WindowState.Maximized; } else { this.WindowState = WindowState.Normal; } } private void WindowCloseButtonClick(object sender, RoutedEventArgs e) { this.Close(); }
-
-
实现窗体鼠标左键拖拽
响应窗体的MouseLeftButtonDown事件
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { this.DragMove(); }
-
修复最大还原界面显示问题
添加现有项
WindowBehaviorHelper.cs
到Lib文件夹中,在主界面的构造函数中调用修复方法。public MainWindow() { InitializeComponent(); //缩放,最大化修复 WindowBehaviorHelper windowHelper = new WindowBehaviorHelper(this); windowHelper.RepairBehavior(); }
国际化
-
引入LocalResourceManager.cs
可在WPF公用库的Lib中获取LocalResourceManager.cs文件,加入该文件后,在程序主窗体启动的构造函数中添加
LocalResourceManager.GetInstance();
,以加载语言文件资源。注意:必须加在
InitializeComponent();
代码段之前。 -
使用CSMultiLanguageManager提取项目中的语言资源
具体使用方法见该工具的使用说明,可在WPF公用库的Tools目录中获取该工具。
-
使用WpfLangResxConveter将提取到的txt语言文件转换成xaml资源文件
可在WPF公共库的Tools目录中获取到该工具。
注意:转换后的资源文件命名需要按照规范,即 应用程序名称+语言类型+
.xaml
如对于ComplieClient转换资源文件,其中、英文命名应为:CompileClient.zh_CN.xaml、CompileClient.en-US.xaml,并且放置在应用程序根目录/Language
目录下 -
设置程序默认的语言文件
对于目前的这种通过加载本地语言资源实现国际化的方式,如果本地语言资源文件不存在,则应用程序中的语言字符是无法正常显示的,故需要设置程序默认的语言资源,并编译到程序中。如果本地语言资源不存在时,就加载默认资源文件。
即需要在当前应用程序项目中新建
Language
文件夹,且加入应用程序名称+语言类型+.xaml
的默认语言资源文件,目前优先支持中文,检测不到中文资源文件就会再检测英文资源文件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。