WPF应用开发技巧

 约 10 分钟

WPF应用开发技巧

主界面定制开发

  1. 界面无边框样式应用

    • 样式引用

    在界面中引用已有的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>
    
  2. 界面最大最小关闭设计

    • 在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();
          }
      
  3. 实现窗体鼠标左键拖拽

    响应窗体的MouseLeftButtonDown事件

       private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
       {
           this.DragMove();
       }
    
  4. 修复最大还原界面显示问题

    添加现有项 WindowBehaviorHelper.cs 到Lib文件夹中,在主界面的构造函数中调用修复方法。

       public MainWindow()
       {
           InitializeComponent();
           //缩放,最大化修复
           WindowBehaviorHelper windowHelper = new WindowBehaviorHelper(this);
           windowHelper.RepairBehavior();
       }
    

国际化

  1. 引入LocalResourceManager.cs

    可在WPF公用库的Lib中获取LocalResourceManager.cs文件,加入该文件后,在程序主窗体启动的构造函数中添加LocalResourceManager.GetInstance();,以加载语言文件资源。

    注意:必须加在InitializeComponent();代码段之前。

  2. 使用CSMultiLanguageManager提取项目中的语言资源

    具体使用方法见该工具的使用说明,可在WPF公用库的Tools目录中获取该工具。

  3. 使用WpfLangResxConveter将提取到的txt语言文件转换成xaml资源文件

    可在WPF公共库的Tools目录中获取到该工具。

    注意:转换后的资源文件命名需要按照规范,即 应用程序名称+语言类型+.xaml
    如对于ComplieClient转换资源文件,其中、英文命名应为:CompileClient.zh_CN.xaml、CompileClient.en-US.xaml,并且放置在应用程序根目录/Language目录下

  4. 设置程序默认的语言文件

    对于目前的这种通过加载本地语言资源实现国际化的方式,如果本地语言资源文件不存在,则应用程序中的语言字符是无法正常显示的,故需要设置程序默认的语言资源,并编译到程序中。如果本地语言资源不存在时,就加载默认资源文件。

    即需要在当前应用程序项目中新建Language文件夹,且加入应用程序名称+语言类型+.xaml的默认语言资源文件,目前优先支持中文,检测不到中文资源文件就会再检测英文资源文件。

阅读 1.9k

推荐阅读
天地一码农
用户专栏

分享个人平时工作、学习、生活心得体会;记录人情冷暖,事事非非

0 人关注
4 篇文章
专栏主页
目录