年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

WPF中Style的使用

Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了大量的复杂属性的设置。

在WPF中,设置外观样式我们有很多种方式,比如通过设置控件的属性来控制控件的外观样式;或者通过在每一个控件中分别设置Style;或者通过在整个Window.Resource中设置Style,又或者在App.xaml的Application.Resource设置Style。

在此我们就不讨论第一种方式设置控件的外观了,因为这不涉及到Style的使用。那么后三种设置样式来控制控件的外观有什么区别呢?那么我们来分别讨论吧!

第一,通过在每一个控件中分别设置Style来控制控件的外观,示例代码如下:

以上样式的设置只正对当前的Button有效,与其他同种类型的控件无关。

第二,通过在Window.Resource中设置Style来控制控件的外观,示例代码如下:

以上样式的设置,针对整个Window的所有Button有效(只要没有单独的对Button设置),这种方法呢,相对于第一种来说减少了代码量。同时修改起来出错的可能性较小!

第三,通过在App.xaml中的Application.Resource中设置Style来控制控件的外观,示例代码如下:

<Application.Resource>
<Style TargetType="Button">
      "FontFamily" Value="MS Reference Sans Serif" />
      "Background">
        
          "0,0" EndPoint="0,1">
            "White" Offset="0"/>
            "SkyBlue" Offset="0.2"/>
            "SkyBlue" Offset="0.8"/>
            "White" Offset="1"/>
          
        
      
    Style>
Application.Resource>
View Code

以上样式的设置,针对整个Application的所有Button有效(只要在Window.Resource或者独立的Button中没有分别设置),这种方法来设置控件的外观样式呢,相对于前两种来说,代码量有大幅的增加,同时呢,在一个应用程序中,往往同种类型的控件的很多属性都是相同的,我们在Applicaiton.Resource进行全局设置,使其维护更加方便!

好了,以上是我对WPF中Style的理解,希望在我总结的同时,能够给同行们提供帮助,如果发现错误,请积极指正,谢谢!

WPF ListBox 横向排列(摘抄)

如果只是单纯的让ListBox可以横向配列,这样很简单,只需要更改ListBox的ItemsPanel模板就可以,例如:

<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation=”Horizontal” IsItemsHost=”True”/>
ItemsPanelTemplate>
ListBox.ItemsPanel>
ListBox>
  但是这样的修改,ListBox只能横向排列,不会根据宽度自动换行,如果想要横向排列的ListBox支持根据宽度自动换行的话,需要这样写:

<ListBox.Template>
<ControlTemplate TargetType=”{x:Type ListBox}”>
<ScrollViewer HorizontalScrollBarVisibility=”Disabled” VerticalScrollBarVisibility=”Auto”>
<WrapPanel Orientation=”Horizontal” IsItemsHost=”True” ScrollViewer.CanContentScroll=”True”/>
ScrollViewer>
ControlTemplate>
ListBox.Template>
 
<Style TargetType="{x:Type ListBox}">
  "ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
  "ItemsPanel">
    
      
        "Horizontal" Margin="2" Background="LightGray"/>
      
    
  
  "ItemContainerStyle">