技术开发 频道

WPF企业应用基础:布局综合应用

  XAML代码实现:

<Window
x:Class
="WPFLayoutDemo.PuttingItAllTogether"
   xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
   WindowStartupLocation
="CenterScreen"        Title="布局综合运用"
Width
="640" Height="480" >  
  
<DockPanel Width="Auto" Height="Auto" LastChildFill="True">  
    
<!--Top Menu Area-->  
      
<Menu Width="Auto" Height="20" Background="LightGray" DockPanel.Dock="Top">  
          
<!-- File Menu -->
          
<MenuItem Header="文件">              
<MenuItem Header="保存"/>
              
<Separator/>  
              
<MenuItem Header="退出"/>  
  
</MenuItem>  
        
<!-- About Menu -->            <MenuItem Header="帮助">
              
<MenuItem Header="关于本产品"/>
          
</MenuItem>
  
    
</Menu>
      
<!--State -->  
      
<StackPanel Width="Auto" Height="31" Background="LightGray"
Orientation
="Horizontal"
DockPanel.Dock
="Bottom">
          
<Label Width="155" Height="23" Content="状态栏" FontFamily="Arial" FontSize="10"/>    
  
</StackPanel>  
      
<!--Left-->
      
<StackPanel Width="136" Height="Auto" Background="Gray">
          
<Button Margin="5,5,5,5" Width="Auto" Height="26" Content="导航栏"/>          
<Button Width="126" Height="26" Content="导航栏" Margin="5,5,5,5"/>  
        
<Button Width="126" Height="26" Content="导航栏" Margin="5,5,5,5"/>
      
</StackPanel>      
  
<!--Right-->      
<Grid Width="Auto" Height="Auto" Background="White">
          
<Grid.ColumnDefinitions>
              
<ColumnDefinition Width="*"/>  
            
<ColumnDefinition Width="*"/>  
        
</Grid.ColumnDefinitions>            <Grid.RowDefinitions>
              
<RowDefinition Height="*"/>  
              
<RowDefinition Height="*"/>  
          
</Grid.RowDefinitions>
                      
<Rectangle Fill="Gray" Margin="10,10,10,10" Grid.Row="0" Grid.Column="0"/>
          
<Rectangle Fill="Gray" Margin="10,10,10,10" Grid.Row="0" Grid.Column="1"/>  
          
<Rectangle Fill="Gray" Margin="10,10,10,10" Grid.Row="1" Grid.Column="0"/>  
        
<Rectangle Fill="Gray" Margin="10,10,10,10" Grid.Row="1" Grid.Column="1"/>
      
</Grid>  
</DockPanel>
</Window>

   其实用熟练上面的各个布局控件以后,你会发现布局UI是一件非常容易的事,遇到一个新的UI,你会发现任意一个Panel都可以实现你的需求。当然对于较复杂且对要求很高的UI,我们也会自定义一些Panel,在下面我们就简单介绍一下自定义布局控件。

  十四.自定义布局控件

  讲到自定义布局控件,我们必须得先谈一下在WPF中自定义控件,在WPF自定义控件你可以选择下图的一些基类作为继承对象,你也可以继承自已有的一些控件,这个就看你的需要了。其实开发WPF自定义控件和开发WinForm、ASP.NET自定义控件基本类似,只是要注意一些特别的地方,比如依赖属性的处理、路由事件、视觉树和逻辑树等等。

  于今天只是讲如何开发一个自定义的Panel,所以在清楚了基类的前提下,首先得了解它有哪些属性和事件,这样就可以确定哪些是不需要单独写、哪些是需要override。下图就是Panel和基类FrameworkElement 的类图:

  在清楚了上面这张图以后,我们就可以着手开始写了,我们知道布局系统的工作原理是先测量后排列,测量就是确定面板需要多大空间,排列则是定义其面板内子元素的排列规则。自定义面板要继承自Panel类并重写MeasureOverride和rrangeOverride方法即可,如下便是一个简单的自定义Panel:

0
相关文章