国产凹凸在线-国产拗女一区二区三区-国产白白视-国产白领-国产白拍-国产白丝jk被疯狂输-国产白丝喷-国产白丝在线

金喜正规买球

WPF基礎到企業應用系列6——布局全接觸

轉帖|其它|編輯:郝浩|2010-11-02 15:46:55.000|閱讀 1115 次

概述:今天我們主要講了WPF布局系統,對整個布局系統的原理、各個Panel的基本用法(分別用XAML和C#兩種方式實現同一個功能,便于大家學習)以及自定義布局控件做了一些介紹,由于內容太多,我只是力所能及的做一些相關的介紹和演示,所以只能給大家提供一個參考,如果大家想了解更多,還需要去看專門的教材,同時有些知識也只是個人的一些見解,所以大家只能將就著看了。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

一. 摘要

  首先很高興這個系列能得到大家的關注和支持,這段時間一直在研究Windows Azure,所以暫緩了更新,同時也本著想把它寫好、寧缺毋濫的精神,在速度上自然也就慢了下來,這篇文章拖拖拉拉也經歷了十多天才發布出來(每天寫一點),不過請大家放心,這個系列一定會繼續寫下去。由于自己才疏學淺且是對這些技術的使用總結和心得體會,錯誤之處在所難免,懷著技術交流的心態,在這里發表出來,所以希望大家能夠多多指點,這樣在使一部分人受益的同時也能糾正我的錯誤觀點,以便和各位共同提高。

  這篇文章主要是對WPF布局系統做一個較簡單的介紹,大家都知道:UI是做好一個軟件很重要的因素,如果沒有一個漂亮的UI,再怎么強大的功能也會顯得這個軟件很脆弱且沒有投資價值。本文以總分總的形式展開介紹:首先對WPF Panel做一個總體認識、然后講解各Panel基本用法(分別用XAML和C#兩種方式實現同一個功能,便于大家學習)、布局綜合應用、自定義布局控件以及最后的總結,希望對大家有所幫助。

二. 本文提綱

· 1.摘要

· 2.本文提綱

· 3.總體介紹

· 4.Canvas

· 5.StackPanel

· 6.WrapPanel

· 7.DockPanel

· 8.Grid

· 9.UniformGrid

· 10.ViewBox

· 11.Border

· 12.ScrollViewer

· 13.布局綜合應用

· 14.自定義布局控件

· 15.本文總結

· 16.系列進度

· 17.相關代碼

三. 總體介紹

  WPF的布局控件都在System.Windows.Controls.Panel這個基類下面,使用 Panel 元素在WPF應用程序中放置和排列子對象。它具體包括哪些布局控件以及如何使用這些布局控件(分別用XAML和C#兩種方式實現同一個功能)、如何開發自定義的布局控件,也就是本文所要討論的范疇:

 

Panel具體繼承關系詳見下面類圖:

 

  如上圖,公共屬性太多了,就簡單介紹幾個常見的屬性:Margin是元素與其他元素的外邊距;Padding是指在本元素內部的元素內容與邊緣的距離;前面這兩個元素基本和ASP.NE中的Margin和Padding類似,只是定義大小的設置不同而已; FlowDirection屬性標示元素的內容顯示方向;Panel.ZIndex是相對于顯示屏的Z軸坐標,用于調整層疊元素的顯示先后;RenderTransform和LayoutTransform用來將縮放和旋轉的變換應用到某個元素上。

  一個Panel 的呈現是測量和排列Children子元素、然后在屏幕上繪制它們的過程。所以在布局的過程中會經過一系列的計算,那么Children 越多,執行的計算次數就越多。如果不需要較為復雜的 Panel(如 Grid和自定義復雜的Panel),則可以使用構造相對簡單的布局(如 Canvas、UniformGrid等),這種布局可帶來更好的性能。 如果有可能,我們應盡量避免不必要地調用 UpdateLayout方法。

  每當Panel內的子元素改變其位置時,布局系統就可能觸發一個新的處理過程。對此,了解哪些事件會調用布局系統就很重要,因為不必要的調用可能導致應用程序性能變差。

  換句話說,布局是一個遞歸系統,實現在屏幕上對元素進行大小調整、定位和繪制,然后進行呈現。具體如下圖,要實現控件0的布局,那么先要實現0的子控件01,02...的布局,要實現01的布局,那么得實現01的子控件001,002...的布局,如此循環直到子控件的布局完成后,再完成父控件的布局,最后遞歸回去直到遞歸結束,這樣整個布局過程就完成了.

 

  布局系統為 Children 集合的每個成員完成兩個處理過程:測量處理過程(Measure)和排列處理過程(Arrange)。每個子 Panel 均提供自己的 MeasureOverride 和 ArrangeOverride 方法,以實現自己特定的布局行為。

四. Canvas

  Canvas比較簡單,只是一個存儲元素的容器,它不會自動調整內部元素的排列及大小。不指定元素位置,元素將默認顯示在畫布的左上方。Canvas的主要用途是用來畫圖。Canvas默認不會自動裁減超過自身范圍的內容,即溢出的內容會顯示在Canvas外面,這是因為默認 ClipToBounds="False";我們可以通過設置ClipToBounds="True來裁剪多出的內容。

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=";//schemas.microsoft.com/winfx/2006/xaml" x:Class=

"WPFLayoutDemo.CanvasDEMO"
x:Name="Window"
Title="CanvasDEMO"
WindowStartupLocation="CenterScreen"
Width="640" Height="480">
<Canvas Margin="0,0,0,0" Background="White">
<Rectangle Fill="Red"
Stroke="Azure"
Width="209"
Height="159"
Canvas.Left="310" Canvas.Top="181"/>
<Ellipse Fill="Azure"
Stroke="Green"
Width="258" Height="97"
Panel.ZIndex="1"
Canvas.Left="165" Canvas.Top="145"/>
</Canvas></Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class CanvasDEMOCodeBehind
{
public CanvasDEMOCodeBehind()
{
this.InitializeComponent();
Canvas canv = new Canvas();
//把canv添加為窗體的子控件
this.Content = canv;
canv.Margin = new Thickness(0, 0, 0, 0);
canv.Background = new SolidColorBrush(Colors.White); //Rectangle
Rectangle r = new Rectangle();
r.Fill = new SolidColorBrush(Colors.Red);
r.Stroke = new SolidColorBrush(Colors.Red);
r.Width = 145;
r.Height = 126;
r.SetValue(Canvas.LeftProperty, (double)124);
r.SetValue(Canvas.TopProperty, (double)122);
canv.Children.Add(r);
//Ellipse
Ellipse el = new Ellipse();
el.Fill = new SolidColorBrush(Colors.Azure);
el.Stroke = new SolidColorBrush(Colors.Azure);
el.Width = 121;
el.Height = 100;
el.SetValue(Canvas.ZIndexProperty, 1);
el.SetValue(Canvas.LeftProperty, (double)195);
el.SetValue(Canvas.TopProperty, (double)191);
canv.Children.Add(el);
}
}
}

五. StackPanel

  StackPanel就是將子元素按照堆棧的形式一一排列,通過設置面板的Orientation屬性設置了兩種排列方式:橫排(Horizontal默認的)和豎排(Vertical)??v向的StackPanel默認每個元素寬度與面板一樣寬,反之橫向亦然。如果包含的元素超過了面板空間,它只會截斷多出的內容。 元素的Margin屬性用于使元素之間產生一定得間隔,當元素空間大于其內容的空間時,剩余空間將由HorizontalAlignment和VerticalAlignment屬性來決定如何分配。其他屬性,大家可以看看如下類圖:

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml&quot; x:Class=

"WPFLayoutDemo.StackPanelDEMO"
x:Name="Window"
Title="StackPanelDEMO"
WindowStartupLocation="CenterScreen"
Width="640" Height="480">
<StackPanel Margin="0,0,0,0" Background="White" Orientation=

"Vertical"> <Button Content="Top of Stack"/>
<Button Content="Middle of Stack"/>
<Button Content="Bottom Of Stack"/>
</StackPanel>
</Window>]

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class StackPanelDEMOCodeBehind
{
public StackPanelDEMOCodeBehind()
{
this.InitializeComponent();

StackPanel sp = new StackPanel();
//把sp添加為窗體的子控件
this.Content = sp;
sp.Margin = new Thickness(0, 0, 0, 0);
sp.Background = new SolidColorBrush(Colors.White);
sp.Orientation = Orientation.Vertical;
//Button1
Button b1 = new Button();
b1.Content = "Top of Stack";
sp.Children.Add(b1);
//Button2
Button b2 = new Button();
b2.Content = "Middle of Stack";
sp.Children.Add(b2);
//Button3
Button b3 = new Button();
b3.Content = "Bottom of Stack";
sp.Children.Add(b3);
}
}
}

六. WrapPanel

  WrapPanel是一個非常簡單的面板,從左至右按順序位置定位子元素,如果排滿斷開至下一行。后續排序按照從上至下或從右至左的順序進行。WrapPanel面板也提供了 Orientation屬性設置排列方式,這跟上面的StackPanel基本相似。不同的是WrapPanel會根據內容自動換行。

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml" x:Class=

"WPFLayoutDemo.WrapPanelDEMO"
x:Name="Window"
Title="WrapPanelDEMO"
WindowStartupLocation="CenterScreen"
Width="640&quot; Height="480">

<WrapPanel Margin="0,0,0,0&quot; Background="White">

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height="60"/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height="60"/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height="60"/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height=&quot;60&quot;/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height="60"/>

<Rectangle Margin="10,10,10,10&quot; Fill ="Azure" Width="60" Height="60"/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height=&quot;60"/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height=&quot;60"/>

<Rectangle Margin="10,10,10,10" Fill ="Azure" Width="60" Height="60"/>

<Rectangle Margin="10,10,10,10&quot; Fill ="Azure" Width="60" Height="60"/>

</WrapPanel>
</Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class WrapPanelDEMOCodeBehind
{
public WrapPanelDEMOCodeBehind()
{
this.InitializeComponent();
WrapPanel wp = new WrapPanel();
//把wp添加為窗體的子控件
this.Content = wp;
wp.Margin = new Thickness(0, 0, 0, 0);
wp.Background = new SolidColorBrush(Colors.White);
//遍歷增加Rectangles
Rectangle r;
for (int i = 0; i <= 10; i++)
{
r = new Rectangle();
r.Fill = new SolidColorBrush(Colors.Azure);
r.Margin = new Thickness(10, 10, 10, 10);
r.Width = 60;
r.Height = 60;
wp.Children.Add(r);
}
}
}
}

七. DockPanel

  DockPanel定義一個區域,在此區域中,您可以使子元素通過描點的形式排列。??棵姘迤鋵嵕褪窃赪inForm類似于Dock屬性的元素。DockPanel會對每個子元素進行排序,并停靠在面板的一側,多個??吭谕瑐鹊脑貏t按順序排序,最后一個元素填充這個Panel(這個需要設置LastChildFill屬性為 True)。對于在DockPanel中的元素的停靠屬性可以通過Panel.Dock的附加屬性來設置.

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml" x:Class=

"WPFLayoutDemo.DockPanelDEMO"
x:Name="Window"
Title="DockPanelDEMO"
WindowStartupLocation="CenterScreen"
Width="640" Height="480">
<DockPanel Width="Auto" Height="Auto" LastChildFill="True">
<Rectangle Fill="Beige" Stroke="BlanchedAlmond" Height="180" DockPanel.Dock="Top"/>
<Rectangle Fill="Azure" Stroke="Orange" />
</DockPanel></Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class DockPanelDEMOCodeBehind
{
public DockPanelDEMOCodeBehind()
{
this.InitializeComponent();
DockPanel dp = new DockPanel();
dp.LastChildFill = true;
dp.Width = Double.NaN;
//這個就相當于在XAML中設置Width="Auto"
dp.Height = Double.NaN;
//這個就相當于在XAML中設置Height="Auto"
//把dp添加為窗體的子控件
this.Content = dp;
//添加Rectangles
Rectangle rTop = new Rectangle();
rTop.Fill = new SolidColorBrush(Colors.BlanchedAlmond); rTop.Stroke = new SolidColorBrush(Colors.BlanchedAlmond);
rTop.Height = 180;
dp.Children.Add(rTop);
rTop.SetValue(DockPanel.DockProperty,Dock.Top);
Rectangle rFill = new Rectangle();
rFill.Fill = new SolidColorBrush(Colors.Azure);
rFill.Stroke = new SolidColorBrush(Colors.Azure);
dp.Children.Add(rFill);
}
}
}

八. Grid

  Grid和其他各個Panel比較起來,功能最多也最為復雜,它由<Grid.ColumnDefinitions>列元素集和<Grid.RowDefinitions>行元素集合兩種元素組成。而放置在Grid面板中的控件元素都必須顯示采用附加屬性語法定義其放置所在的行和列,否則元素均默認放置在第0行第0列。由于Grid的組成并非簡單的添加屬性標記來區分行列,這也使得用戶在實際應用中可以具體到某一單元格中,所以布局起來就很精細了。

Grid的列寬與行高可采用固定、自動、按比列三種方式定義

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="300" />
</Grid.ColumnDefinitions></Grid>

第一種,固定長度——寬度不夠,會裁剪,不好用。單位pixel。
第二種,自動長度——自動匹配列中最長元素的寬度。
第三種,比例長度——*表示占用剩余的全部寬度;兩行都是*,將平分剩余寬度;像上面的一個2*,一個*,表示前者2/3寬度。

跨越多行和多列

<Rectangle Fill=";Silver" Grid.Column="1" Grid.ColumnSpan="3"/>

使用Grid.ColumnSpan和Grid.RowSpan附加屬性可以讓相互間隔的行列合并,所以元素也可以跨越多個單元格。

使用GridSplit分割

<GridSplitter Height="6" VerticalAlignment="Stretch" 
HorizontalAlignment="Stretch"     
           Grid.Row="2" Grid.Column="2"></GridSplitter>

使用GridSplit控件結合Grid控件實現類似于WinForm中SplitContainer的功能,這個大家在WinForm當中經常用到,我們也不多做介紹。

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml" x:Class="WPFLayoutDemo.GridDEMO"
x:Name="Window"
Title="GridDEMO"
WindowStartupLocation="CenterScreen"
Width="640" Height="480">
<Grid Width="Auto" Height="Auto" >
<Grid.ColumnDefinitions>

<ColumnDefinition Width="139"/>
<ColumnDefinition Width="184*"/>
<ColumnDefinition Width="45*" />
<ColumnDefinition Width="250*"/>
</Grid.ColumnDefinitions>
<Rectangle Fill="Azure" Grid.ColumnSpan="2" Margin="0,0,21,0" /> <Rectangle Fill="Silver" Grid.Column="1" Grid.ColumnSpan="3"/>
</Grid>
</Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class GridDEMOCodeBehind
{
public GridDEMOCodeBehind()
{
this.InitializeComponent();
Grid grid = new Grid();
grid.Width = Double.NaN;
//這個就相當于在XAML中設置Width="Auto"
grid.Height = Double.NaN;
//這個就相當于在XAML中設置Height="Auto"
//把grid添加為窗體的子控件
this.Content = grid;
//列一
ColumnDefinition cd1 = new ColumnDefinition();
cd1.Width = new GridLength(139);
grid.ColumnDefinitions.Add(cd1);
//列二
ColumnDefinition cd2 = new ColumnDefinition();
cd2.Width = new GridLength(1, GridUnitType.Star); grid.ColumnDefinitions.Add(cd2);
//列三
ColumnDefinition cd3 = new ColumnDefinition();
cd3.Width = new GridLength(2, GridUnitType.Star); grid.ColumnDefinitions.Add(cd3);
//把單元格添加到grid中

Rectangle r1c1 = new Rectangle();
r1c1.Fill = new SolidColorBrush(Colors.Azure);
r1c1.SetValue(Grid.ColumnProperty, 0);
r1c1.SetValue(Grid.RowProperty, 0);
grid.Children.Add(r1c1);
Rectangle r1c23 = new Rectangle();
r1c23.Fill = new SolidColorBrush(Colors.Silver);
r1c23.SetValue(Grid.ColumnProperty, 1);
r1c23.SetValue(Grid.ColumnSpanProperty, 2);
grid.Children.Add(r1c23);
}
}
}

九 UniformGrid

  介紹了前面的Grid,接下來的這個UniformGrid 就太簡單了,均布網格的是Grid的簡化版本,每個單元格的大小相同,不用在定義行列集合。均布網格每個單元格只能容納一個元素,將自動按照定義在其內部的元素個數,自動創建行列,并通常保持相同的行列數。

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window x:Class="WPFLayoutDemo.UniformGridDEMO" xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
Title="UniformGridDEMO" Height="300" Width="300">
<UniformGrid Columns="2" Rows="2" Name="uniformGrid1" >
<Rectangle Margin="10,10,10,10" Fill ="Gray"/>
<Rectangle Margin="10,10,10,10" Fill ="Gray" />
<Rectangle Margin="10,10,10,10" Fill ="Gray" />
<Rectangle Margin="10,10,10,10" Fill ="Gray" />
</UniformGrid>
</Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class UniformGridDEMOCodeBehind : Window
{
public UniformGridDEMOCodeBehind()
{
InitializeComponent();
UniformGrid wp = new UniformGrid();
//把wp添加為窗體的子控件
this.Content = wp;

wp.Margin = new Thickness(0, 0, 0, 0);
wp.Background = new SolidColorBrush(Colors.White);
//遍歷增加Rectangles
Rectangle r;
for (int i = 0; i <= 10; i++)
{
r = new Rectangle();
r.Fill = new SolidColorBrush(Colors.Gray);
r.Margin = new Thickness(10, 10, 10, 10);
wp.Children.Add(r);
}
}
}
}

十. ViewBox

  ViewBox這個控件通常和其他控件結合起來使用,是WPF中非常有用的控制。定義一個內容容器,該容器可拉伸和縮放單個子元素以填滿可用空間。一個 Viewbox 只能具有一個 Child。如果添加一個附加 Child,會導致一個運行時 ArgumentException錯誤。我們用得最多的首先是Stretch屬性,然后是StrctchDirection屬性,關于這兩個元素,大家可以運行我們的代碼,然后改變設置就可以看到效果。

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window x:Class="WPFLayoutDemo.ViewBoxDemo" xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
Title="ViewBoxDemo" Height="342" Width="535">
<Viewbox Stretch="Uniform">
<Button Content="Hello,Knights Warrior" />
</Viewbox>
</Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class ViewBoxDEMOBehind : Window
{
public ViewBoxDEMOBehind()
{
this.InitializeComponent();
Viewbox vb = new Viewbox();
vb.Stretch = Stretch.Uniform ;
//把vb添加為窗體的子控件
this.Content = vb;
//Button1

Button b1 = new Button();
b1.Content = "Hello,Knights Warrior";
vb.Child=b1;
}
}
}

十一. Border

  Border 是一個裝飾的控件,此控件繪制邊框及背景,在 Border 中只能有一個子控件(這個子控件又可以包含多個子控件)。Border 的幾個重要屬性:Background:用用一個 Brush 對象來繪制背景 ;BorderBrush:用一個Brush 對象來繪制邊框 ;BorderThickness:此屬性設置 Border 邊框的大??;CornerRadius:此屬性設置 Border 的每一個角圓的半徑;Padding:此r屬性設置 Border 里的內容與邊框的之間的間隔。

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window x:Class="WPFLayoutDemo.BorderDEMO" xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
Title="BorderDEMO" Height="300" Width="300">
<Border
BorderThickness="5"
BorderBrush="Green"
CornerRadius="10"
Background="LightGray"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="270" Height="250">

<Canvas Background="LightCyan" >
<Rectangle
Canvas.Left="30" Canvas.Top="20"
Height="200" Width="200"
Stroke="Black" StrokeThickness="10" Fill="Red" />
</Canvas>
</Border>
</Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class BorderDEMOCodeBehind : Window
{
public BorderDEMOCodeBehind()
{
InitializeComponent();
Border border = new Border();
border.Background = new SolidColorBrush(Colors.LightGray); border.BorderThickness = new Thickness(5);
border.BorderBrush = new SolidColorBrush(Colors.Green); border.CornerRadius = new CornerRadius(15);
border.Width = 270;
border.Height = 250;
Canvas cnvas = new Canvas();
Rectangle rect = new Rectangle();
rect.Width = 200;
rect.Height = 200;
rect.Fill = new SolidColorBrush(Colors.Black);
rect.StrokeThickness = 10d;
cnvas.Children.Add(rect);
border.Child = cnvas;
this.Content = border;
}
}
}
 

十二. ScrollViewer

  通常用戶界面中的內容比計算機屏幕的顯示區域大,大出的部分就會破壞原有的布局。利用 ScrollViewer 控件可以方便地使應用程序中的內容具備滾動功能。這樣大出的部分就可以正常顯示出來了。常用屬性、事件和繼承關系見下面類圖:

 

要實現的效果如下圖(用XAML和C#實現同一效果):

 

XAML代碼實現:

<Window x:Class="WPFLayoutDemo.ScrollViewerDEMO" xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
Title="ScrollViewerDEMO" Height="300" Width="300">
<Grid>
<ScrollViewer>
<Rectangle Width="500" Height="500" Fill="Gray"></Rectangle> </ScrollViewer>
</Grid>
</Window>

C#代碼實現:

namespace WPFLayoutDemo
{
public partial class ScrollViewerDEMOCodeBehind : Window
{
public ScrollViewerDEMOCodeBehind()
{
InitializeComponent();
ScrollViewer myScrollViewer = new ScrollViewer(); myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; Rectangle myRectangle = new Rectangle();

myRectangle.Fill = Brushes.Gray;
myRectangle.Width = 500;
myRectangle.Height = 500;
myScrollViewer.Content = myRectangle;
this.Content = myScrollViewer;
}
}
}

十三.布局綜合應用

  前面通過十多個小節講了一些常用Panel的基本用法,那我們這里就簡單做一個綜合的小例子,通過這個例子,旨在鞏固前面的內容,也可以當做一個舉一反三的過程。要實現的效果如下圖:

 

XAML代碼實現:

<Window x:Class="WPFLayoutDemo.PuttingItAllTogether" xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//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=&quot;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>

  其實用熟練上面的各個布局控件以后,你會發現布局UI是一件非常容易的事,遇到一個新的UI,你會發現任意一個Panel都可以實現你的需求。當然對于較復雜且對要求很高的UI,我們也會自定義一些Panel,在下面我們就簡單介紹一下自定義布局控件。

十四.自定義布局控件

  講到自定義布局控件,我們必須得先談一下在WPF中自定義控件,在WPF自定義控件你可以選擇下圖的一些基類作為繼承對象,你也可以繼承自已有的一些控件,這個就看你的需要了。其實開發WPF自定義控件和開發WinForm、ASP.NET自定義控件基本類似,只是要注意一些特別的地方,比如依賴屬性的處理、路由事件、視覺樹和邏輯樹等等。

 

  于今天只是講如何開發一個自定義的Panel,所以在清楚了基類的前提下,首先得了解它有哪些屬性和事件,這樣就可以確定哪些是不需要單獨寫、哪些是需要override。下圖就是Panel和基類FrameworkElement 的類圖:

 

  在清楚了上面這張圖以后,我們就可以著手開始寫了,我們知道布局系統的工作原理是先測量后排列,測量就是確定面板需要多大空間,排列則是定義其面板內子元素的排列規則。自定義面板要繼承自Panel類并重寫MeasureOverride和rrangeOverride方法即可,如下便是一個簡單的自定義Panel:

namespace WPFLayoutDemo
{
public class PlotPanel : Panel
{
public PlotPanel()
: base()
{
}
//重寫默認的Measure方法
protected override Size MeasureOverride(Size availableSize)
{
Size panelDesiredSize = new Size();
foreach (UIElement child in InternalChildren)
{
child.Measure(availableSize);
panelDesiredSize = child.DesiredSize;
}
return panelDesiredSize;
}
//重寫默認的Arrange方法
protected override Size ArrangeOverride(Size finalSize)
{
foreach (UIElement child in InternalChildren)
{
double x = 50;
double y = 50;
child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
}
return finalSize;
}
}
}
 

  控件的最終大小和位置是由該控件和父控件共同完成的,父控件會先給子控件提供可用空間(availableSize),子控件再反饋給父控件一個自己的期望值(DesiredSize),父控件最后根據自己所擁有的空間大小與子控件的期望值分配一定的空間給子控件并返回自己的大小.那么這個過程就是通過MeasureOverride 和ArrangeOverride這兩個方法來完成(注意父控件的availableSize是減去Margin、padding等的值)。

  本來想自己開發一個較復雜的Panel控件放上來,但一搜網絡,發現已經有很多很好的Panel控件,所以在這里我也不寫那么多了,大家可以研究一下這些控件,我也研究了幾個,覺得最好理解且最美觀的當屬&ldquo;FishEyePanel & FanPanel, Paul Tallett, codeproject ”,大家可以根據鏈接過去看一下,Paul Tallett講解得非常的細致。

  • TreeMapPanel, Kevin Moore (see bag-o-tricks for code)
  • AnimatingTilePanel, Kevin Moore (see bag-o-tricks for code)
  • Disposing Virtualizing Stack Panel, Aaron, WiredPrairie.us
  • TimeLinePanel, Rob Zelt, robzelt.com (with credit to Robert Ingebretsen and Lauren Lavoie)
  • Chart and Lens Panel by John Stewien (code available?)
  • DiagonalPanel
  • FishEyePanel & FanPanel, Paul Tallett, codeproject
  • RadiaPanel & ItemsRadialPanel, Rhett log (Henry Hahn posted a Radial panel in 2005, but I'm not sure if it runs or not?)
  • DisclaimerPanel, Chaz
  • SpanningStackPanel, Nick Theusen
  • PlotPanel, Windows SDK Sample
  • CollapsiblePanel, Thomas Lebrun
  • CornerStacker, Nick Thuesen
  • StickyPanel, Unni, Blend PM
  • ItemSkimmingPanel, Pavan Podila

順便也鏈接兩幅圖:

 

講到這里,我們也順便提一下寫WPF自定義控件的幾個步驟,以后在講到這一節的時候會詳細講解:

  • 首先你得清楚你的自定義控件是干什么用的(能解決什么問題)?公用到什么程度(其他項目也可以用、本項目用、項目當中一個模塊用、只有一個地方用)?是繼承已有的控件還是從頭寫?對設計時是否支持?樣式和模板的定義等。
  • 確定好了上面的步驟后,我們就可以建立項目的結構,類和資源文件等該放在什么位置也就在這一步確定。
  • 選擇要繼承的基類(UIElement、FrameworkElement 、Control 、ContentControl 、HeaderedContentControl 、ItemsControl 、Selector 、RangeBase還是已有的一些控件)。
  • 重寫默認的樣式和新建一些樣式并附默認值。
  • 由于WPF的屬性基本都是依賴屬性,所以我們也要新建一些依賴屬性。
  • 邏輯樹和視覺樹的一些處理以及事件等。

十五.本文總結

  今天我們主要講了WPF布局系統,對整個布局系統的原理、各個Panel的基本用法(分別用XAML和C#兩種方式實現同一個功能,便于大家學習)以及自定義布局控件做了一些介紹,由于內容太多,我只是力所能及的做一些相關的介紹和演示,所以只能給大家提供一個參考,如果大家想了解更多,還需要去看專門的教材,同時有些知識也只是個人的一些見解,所以大家只能將就著看了。寫篇文章也是懷著技術交流的心態發布出來,由于是自己對這些技術的使用總結和心得體會,錯誤之處在所難免,所以希望大家能夠多多指點,這樣也能糾正我的錯誤觀點,以便和各位共同提高!


標簽:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn

文章轉載自:博客轉載自圣殿騎士

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
日本老妇人 | 亚洲国产午夜 | 乱伦精品亚洲影视 | 日韩欧美三级理论在线观看 | 日韩欧美亚洲国产另类 | 国产精品天天看 | 国产午夜福利1000我不卡 | 美国十次啦超级大导航 | 午夜成人亚洲理伦片在线观看 | 热门好看的电影大全 | 91精品国产自产高清在 | 午夜自产精品一区二区三区 | 不卡一区二区三区在线视频 | 亚洲风情亚aⅴ在线发布 | 无限资源最 | 精品97国产免费人成视频 | 男女之间的唏唏哩哩二人世界 | 天堂草原影院电视剧 | 一级a做一级a做片性高清视频 | 日韩综合一卡二卡三卡死四卡 | 亚洲视频中文字幕在线不卡 | 日本阿v免费观看视频 | 欧美日本国产综合 | 日本在线观看的免费 | 国产高清晰在线播放 | 国产精品一区二区 | 国产香蕉一区二区在线网站 | 日本在线视频一区 | 国产亚洲a∨片在线观看 | 国产伦精品一区二区三区男技 | 国产99爱 | 久热国产精品视频 | 久热欧美手机视频在线观看 | 欧美国产日韩在线播放成人 | 国产精品自在拍在线播放 | 日韩欧美亚洲国产永久在线观看 | 精品乱子伦一区二区三区 | 网曝精品视频在线 | 九九在线视频观看只有精品 | 国产精品成人一区视频网站 | 国内国外精品一区二区 | 国产一区二区福利 | 日韩精品视频在线观看 | 日本一本二本三区免费2025 | 中文字幕乱码高清免费网站 | 欧美精品亚洲日韩aⅴ | 在线电影电视剧动漫综艺免费观看 | 国内成人精品网 | 成人69激情视频在线观看 | 精品国产网红福利在线观看 | 国产乱码精品一 | 国产精品日韩一 | 日本亚欧精品在线视频 | 欧美bbw性色大片 | 日本高清视频在线www色下载 | 欧美日韩在线无吗一区二区三区 | 乌克兰少 | 国产在线播放精品三区 | 日韩欧美高清一区 | 国产乱码精品一区二区三区小说 | 精品国产一区二区三区香蕉不卡 | 精品一线二线三线 | 成人一区专区在 | 国产中文字幕玖玖观看互动交流 | 国产精品视频顷一区 | 国产一本视频在线播放 | 国产高清不卡在线 | 欧美日韩国产高 | 亚洲精品免费日日日夜夜夜夜 | 国产精品日韩在线一区 | 国产精品自产精品在线观看 | 国产精品国产自线在线观看 | 91人成亚洲高清 | 精品一区二区视频免费看 | 国产嘿嘿嘿视频在线观看 | 亚洲一区二区福利在线观看 | 国语自产偷拍精品视 | 精品一区二区三区四区在线 | 欧美色中文字幕第一页 | 免费高清电影影视大全 | 国产精品太长太粗太 | 成人怡红院视频在线观看 | 成人免费一区二区三区视 | 日韩欧美国产综合 | 永久免费国产成 | 国产一区二区三区日韩 | 国产一区二区三区免费在线 | 国产欧美亚洲专区在线 | 欧美日韩一卡二卡 | 国产亚洲第一伦理第一区 | 日本一区不卡在线 | 国产亚洲情侣一区二区无 | 国产妇女视频免费 | 亚洲日韩在线中文字幕综合 | 成人欧美一 | 国产精品色片 | 亚洲九九九九精品 | 日韩欧美一区二区三区视频 | 岛国激情视频一区 | 国产a成人一区二区三区 | 亚洲人成色77777在线观看 | 日本三级韩国三级三级a级按 | 国产一区二区三区在线观看视频 | 国产欧美日本不卡 | 国产太嫩了在线观看 | 国产青榴视频在线观看网站 | 欧美三级不卡在线观看 | 99视频精品全部品全正 | 片免费观看 | 伊人热热 | 日本一二区中文字幕在线 | 飘花在线影院 | 亚洲日本一区二区三区在线不卡 | 国产乱伦视频 | 高清线视频| 欧美国产一区二区三区 | 欧美日韩综| 国产黄三级 | 国产精品一二三区视频网站 | 欧美精品v欧洲精品 | 99精品全国在线观看 | 国内精品自产拍在线观看 | 中文字幕在线观看国产 | 国产欧美日韩在线观看一区二区 | 日韩专区欧美 | 成人精品一区二区户外勾 | 精品福利枧频网站 | 日韩亚洲 | 成人精品视频一区二区三区 | 97在线观| 国产一区人妖综合 | 国产玉足脚交极品在线播放 | 亚洲精品一品区二品区三区 | 偷拍区清纯另类丝袜美腿 | 国产免费视频观看网站 | 男生搞女生软件 | 日本免费一区二区三区中文字幕 | 亚洲痴女 | 成年人啦啦操软件 | 1024手机看片国产日韩欧美 | 日本看片一区二区免费 | a免费国产一级特黄aa大 | 国产自产一区二区三区视频在线 | 精品国产插穴精品网站日本 | 肉丝在线观看 | 97在线观看高清视频免费 | 精品视频91 | 强视频在线观看 | 乱伦免费影视亚洲 | 激情小说网 | 中国精品国产yw | 国产精品国语 | 99re在线| 7788电影网 | 国产情侣91在 | 精品人伦一区二区三区蜜 | 欧美区在线播放 | 国产哟一区二区三区视频在线看 | 尤物99国产成 | 欧美人与物v | 精品理伦国产在线播放 | 陪读麻麻张开腿让我爽了一夜 | 巨胸美女爆免费网站软件 | 精品国产香蕉伊思人在 | 国产sm重味一区二区三区 | 99国产精品看片 | 手机看片国产欧美日韩 | 精品亚洲不卡一区二区三区四区 | 国产一区私人高清影院 | 国产高清中文字幕欧美 | 国产真实乱系列视频在线观看 | 免费国产黄线在线观看 | 久插视频 | 国产精品一卡二卡三卡 | 国产自产拍精品视频免费看 | 欧美交a欧美| 日本阿v视频高清在线中文 银杏影视 | 日韩精选一区二区在线观看 | 精品一区二区三区高清免费不 | 亚洲一区二 | 麻花传媒免费网 | 日韩在线观看自拍网址视频免费 | 国产一二三区精品免費資訊 | 欧美精品综合一区二区三区 | 亚洲国产精品91 | 欧美日韩国产精品自在 | 日韩高清三级在线观看 | 日韩欧美一级一中文字幕 | 免vip免费观看热播电 | 欧美亚洲日韩aⅴ在线观看 在线综合亚洲欧美日韩手机版 | 亚洲人成日韩中文字幕不卡 | 文中字幕一区二区三区视频播放 | 欧美性猛交xxxxxxxx | 国产片侵 | 日本三区不卡高清更新二区 | 国产福利一区二区三区在线视频 | 亚洲永久| 黑料不打烊最新2025地址 | 玖玖综合 | 成人区精品一区二区不卡 | 国产一区美日一区日韩一区 | 欧美精品18videos性 | 国产第一区二区在线视频 | h视频在线观看免费完整版 在线亚洲日韩欧美一区二区 | 国产激情一区二区三区四区 | 国产成a人亚洲精v | 日韩免费福利试看3分钟 | 国产在线精品观看免费观看 | 欧美人与动牲猛交a欧美精品 | 呦交小u女国产 | 國產精品va | 一区二区三区精品视频免费播放 | 国产亚a | 91精品aa一区二区三区 | 任你躁国语自产一区在 | 国产日韩欧美精 | 久热精品国产 | 日本视频中文字幕 | 96网友上传国产 | 中字幕一区二区三区乱 | 92精品国产自产在线观看48 | 老熟女强人国产在线播放一区 | 国产99精品伦理 | 日韩高清亚洲日韩精品一 | 综合另类小说欧美另类图片 | 在线看国产精品 | 521a成v视频网站在线入口 | 国产精品亚洲日韩欧美在线观看 | 91大神精品网站在线观看 | 五月天丁香婷深爱综合网 | 日本中文字幕乱码专区 | 精品一卡2卡三卡四卡乱码 国产一区二区在线观看网站 | 日本在线观看免费人成视频色 | 日本夜爽爽一区二区三区 | 69精品人人人人人人人人人 | 日本乱码一区二区三区视频 | 日韩精品一线二线三线优势 | 国产福利在线观看极品美女 | 97福利精品第一导航 | 精品国产一区二区三国产 | 国产在线视频第一页 | 77777在线 | 国产精品99精品一区二区 | 精品一区二区三区3d动漫 | 日本一本高清视 | 日本中文字幕一区二区有码在线 | 国产白丝jk学生在线播放 | 欧美日韩精品 | 日韩33页 | 蜜桃国产在线观看网址 | 伦理片手机在线观看 | 国产对白精品刺激一区二区 | 羞羞视频下载 | 欧洲grand老妇人bbw | 国产精品制服丝袜另类 | 国产的精 | 自拍偷区| 亚洲高清国产一区二区三区电影 | 国产精品日日做人人爱 | 国产在线一区二区三区不卡 | 日韩一区二区三区不卡视频 | 18c.mic禁慢天堂王者 | 国产精品欧美日韩视频一区 | 精品国产理论在线观看不卡 | 欧洲裸毛bbbbbxxxx | 亚洲国产日韩欧美一区二区三区 | 国产精品中文字幕组 | 日韩欧美在线观看成人 | 国产精品一区二区三区四区五区 | 日韩国产欧美精品综 | 国产欧美日韩视频在线 | 日韩精品一区二区三区中文不卡 | 国产精品私密保养 | 97影院午夜在线影国产 | 欧美日本国产综合 | 性高朝久| 国产欧美综合系列在线 | 岛国aaaa级午夜福利片 | 国产亚洲精品综合网在线观看 | 国产亚洲一区二区在线 | 国产精品综合色区日韩 | 国产xxxxx片免费观看 | 97国产婷婷综合在线视 | 国精产品一区一区三区mba下载 | 精品无人乱码一区二区三区 | 俺去俺来也在线www色官网 | 国产又黄又 | 日韩亚洲人成网站在线播放 | 日日夜夜精品 | 国产激情一区二区三区 | 日韩欧美国产一区精品 | 亚洲四播房| 国产女同一区二区三区五区 | 日本一区二区三区国产精品 | 国投影院 | 少女哔哩哔 | 国产一级a爱片 | 日本伦理电影网免费播放 | 亚洲无线观| 韩国三级hd中文字幕电影天堂 | 亚洲成aⅴ人 | 国产大片内| 国产极品美| 亚州精品一区二区三区手机一 | 亚洲欧美中文字幕在线播放 | 亚洲欧美日韩中文字幕在线一 | 99色热国产视频精品 | 麻酥酥哟视频在线播放 | 中文文字幕文字幕亚洲色 | 91国语| 欧美黑人疯狂性受 | 欧美一级影院在线观看 | 欧美日本国产综合 | 日本a∨精品一区二区三区 亚洲s色大片在线观看 | 日日插夜夜爽 | 国产日韩一区美利坚 | 国产精品网红尤物福利在 | 日韩欧美极品在线播放 | 亚洲日本精品va中文字幕 | 亚洲精品一区二区三区在 | 日本高清视频在线免费观看 | 国产噜噜噜精品免费视频 | 在线看一区二区中 | 可以看黄的网 | 不卡视频免费 | 国产精品欧美一区二区 | 成人公开免费视频 | 日韩aⅴ手机在线 | 国产极品美 | 日韩一区二区超清视频 | 天天躁日日躁狠狠很躁 | 国产亚洲欧洲综合777 | 欧美激情一区二区三区中文字幕 | 精品国精品国产自在久国产 | 91影视日韩欧美在线观看 | 日本免费一区二区三区中文字幕 | 日本大胆欧美人术艺术 | 91男女免费福利 | 国产在线精品洲综合网首页 | 国产精品亚洲αv天堂 | 成人a免费α片在线视频网站 | 日韩一级一片免免费视频 | 欧美日韩高清不卡 | 日韩国产在线va | 国产又黄又爽视频免费观 | 国产精品中文字幕字幕在线 | 亚洲日本一区二区三区在线不卡 | 国产精品igao| 日韩亚洲综合欧美 | 国产精品艾草在线观看 | 国产精品网红尤物福利在 | 国产真实伦在线播放 | a级国产高清美女理论片 | 今日吃瓜 | jizzjizz丝袜老 | 国产第37页屁屁影院 | 办公室大战高跟丝袜秘书经理ol | 国产特黄特色a级在线视 | 免费成人激情在线 | 亚洲日韩穿丝袜在线推荐 | 成人免费看 | 日韩欧美精品一级特黄大片 | 国产免费爱在线观 | 日韩欧美视频在线观看视频不 | 日本一二三区成人 | 国产91茄子在线播放 | 欧美性爱精品一级大片 | 亚洲愉拍自拍欧美精品 | 欧美性色欧美a在线在线播放 | 91精品国产aⅴ一区二区 | xxxx迷奷在线观看 | 亚洲熟女精品一区二区成人 | 日本二区在线中文字幕 | 国产在线精品一区精品 | 凹凸国产熟女精品视频app | 日韩亚洲欧洲美三区中文字幕 | 强开女学生的小嫩苞 | 欧美阿v天堂视频在99线 | 99这里只有免费费精品 | 国产小视频在线直播播放 | 国产女主播在线播放一区二区 | 久热国产精品视频 | 国产偷拍 | 69xxxxx中国女人 | 国产亚洲欧美日韩精品不卡 | 国产普通话对白露脸流出 | 日本三级人妇在线 | 日韩剧在线观看免费全集 | 日韩成人国产精品视频 | 97亚洲国产中文日韩在线人 | 91精品夜夜夜一区二区 | 日本一二三区视频在线 | 韩国日本免费高清观看网址 | 51福利国产在线观看午夜天堂 | 亚洲偷窥另类xxxxx乱室佳宾 | 精品视频在线 | 国产亚洲日韩欧美在线播放 | 国产亚洲欧洲国产综合一区 | 精品一区精品二区 | 欧美一级夜夜爽 | 一本大道香蕉中文在线视频 | 夜爽8888视频在线观看 | 字幕a∨ | 丰满岳乱妇一区 | 99电影网| 国产人妖视频一区在线观看 | 国产女同专区在线观看 | 亚洲欧美另类日韩综合 | 风流老熟女一区二区三区 | 亚洲高清国产品国语在线观看 | 老司机导航 | 美日韩制服中文字幕视频 | 精品玖玖玖视频在线观看 | 欧美色欧美亚 | 亚洲精品乱无伦国产 | 国产超级乱婬视频免费 | 日韩国产精品va一区二区 | 欧美第一页在线观看 | 热播电视剧免费在线观看 | 欧美日韩中文在线 | 日韩国产中文字幕在线观看 | 欧美日韩国产免费一区二区三区 | 日本在线小视频 | 一区二区三区四区在线视频 | 91午夜福利国产秒播在线观看 | 国产乱子伦高清对白 | 任我撸在| 国产专区在线视频 | 真实国产日韩欧美全部综合视频 | 亚洲精品一二三区尤物tv | 永久免费观看 | 欧美日韩大码中文区二区三区 | 日本韩国三级aⅴ在线观看 欧美a级片视频 | 欧美亚洲精| 亚洲人成色77777在线观看 | 亚洲精品国产v片 | 国产精品翘臀在线播放 | 日韩专区视频国产在线视频 | 日韩欧美精品成人免费高清 | 欧美日韩日处女黑人 | www.xxx国产| 国产玉足榨精视 | 国产精品主播在线 | 国产真实| 国产黄在线观看免费观看不卡 | 日韩一区二区一道高清视频 | 国产欧美日韩精品高清二区综合区 | 国产精品白丝a∨网站 | 国产精品日韩欧美一区二区三区 | 91看片婬黄大片 | 国产精品一国产精品一k频道 | 婷婷伊人网 | 国产视频中文字幕 | 思思伊人 | 精品成人一区二区三区免费视频 | 免费观看国产精品视频 | 在线精品自 | 一区二区免费高清在线观看国产 | 欧美午夜小视频 | 色一情一区二区三区 | 成年免费大片黄在线观看岛国 | 日韩精品亚洲人成在线观看 | 欧美精选一区二区 | 国产一级爽片 | 粗大的内捧猛烈进出在线视频 | 亚洲精品国产一级高清在线观看 | 成人看片黄在线观看 | 成年女人免费毛 | 国产在线视欧美亚综合 | 欧美综合国产精品日韩一 | 91天堂а8天堂资源在线官网 | 亚洲欧美国产日韩精品 | 亚洲最新国产一区二区三区 | 国产在线精品二区 | 污污的软件 | 欧美a欧美乱码一 | 一区二区三区国产亚洲网站 | 亚洲一区二区三区首页 | 99精品在线观看 | 97就去色 | 国产上传中文字幕 | 欧美国产日韩一区二区三区 | 欧美偷窥清纯综 | 秋霞午夜福利影院 | 欧美日产国产首 | 又爽又大又光又色的午夜视频 | 日韩欧美性爱精品一区二区 | 亚洲专区在线 | 欧美视频一区在线 | 丰满成熟亚洲人毛茸茸 | 欧美日韩一区二区不卡 | 国产精品va尤物在线观看性色 | 亚洲欧美日韩综合在线播放 | 国产妇女性爽视频免费 | 国产精品拍综合在线 | 日韩一区国产一级 | 日本乱伦网站 | 福利电影 | 羞羞影视| 国产一本视频在线播放 | 免费精品一区二区三区在线观看 | 在线亚洲日韩欧美一区二区 | 91成人深夜在线观看 | 亚洲日韩中文字幕一区 | 日韩中文高清在线 | 九一看片 | 中文字幕免费高清电视剧网站 | 精品国产色欧洲激情 | 国产精品尤物 | 欧美+日韩+免费 | 日韩伦理在线 | 国产综合精品五月天喷水 | 一区二区欧美日韩高清免费 | 精品国产a∨无 | 69影院| 国产精品综合久成人 | 亚洲日本国产一区二区精品成人 | 青青青在线播 | 果冻传媒视频一二在线观看 | jizz黑人与白人交 | 亚州精品一区中文字幕乱码 | 免费进入 | 欧美亚洲日产综合新一区 | 泰剧tv网| 亚洲欧美日本一区 | 欧美日韩国产免费一区在线观看 | 欧美精品视频免费看 | 国产初高中生在线播放 | 寡妇被折腾的死去活来 | 欧美日韩一区日本成人一区二区 | 肉大捧一进一出免费视频 | 国产拍自 | 国内揄拍国 | 男女互摸视频 | 欧美人与动性行为网站免费 | 日韩精品中文字幕第1页 | 国产伦精品一区三区视频 | 日韩高清一区二区 | 欧美不卡视频一区发布 | 91热这里只有精品 | 国产ol丝袜高跟在线观看不卡 | 亚洲一区精品中文字幕 | 亚洲国产精品∨a在线看黑人 | 日本最大色倩网站 | 国产狂喷潮在线观看国产片 | 91成人精品视频 | 厨房里征服美艳老师 | 最新热播电影完整版 | 91精品最新国自产拍在线观看 | 国产99视频精品免视看7 | 亚洲精品天堂成人 | 肥女巨肥巨大黑毛 | 全国男人的天堂亚洲 | 国产一级a毛一级a看免费视频 | 亚洲自拍色综合图第一页区 | 手机韩剧天天更新韩剧免费看 | 免费网剧电视剧大全 | 精品视频在线观看一区二区 | 亚洲欧美韩国三级 | 日本亚洲视频在线不卡免费 | 国产一级特黄aaa大片在线观 | 日韩大乳视频中文字幕 | 亚洲va天堂va欧美ⅴa | 91导航在线国产无弹窗 | 国产精品国产一区二区三区 | 欧美亚洲范冰冰与中字 | 91啪精品国产自产在线观看 | 护士在办公室被躁bd在线观看 | 国产精品人成电影在线观看 | 精品国产欧美在线小说区 | 在线播放真实国产乱子伦 | 视频在线观看一区 | 成年人免费在线观看视频 | 最好看的中文字幕国语电影 | 日韩在线视频一区中文字幕不卡 | 在线日韩欧美国 | 亚洲精品国产精品乱码视色 | 国产午夜福利在线观看1000集 | 国产日韩网站 | 国产欧色美视频综合二区 | 中文字幕日本在线 | 国产一级在线观看影片 | 深爱激情 | 亚洲人成a在线网站 | 亚洲国产欧美日韩精品网 | 国产日韩在线视频电影 | 国产女人成人精品视频 | 三年片在线观看免费大全哔哩哔哩 | 在线观看免费精品国产第一区 | 国产一级性爱视频 | 日韩裸乳自拍视频网站在线观看 | 亚洲国产日韩欧美一级三级 | 国产偷伦视频片免费视频 | 欧美最猛黑人xxxx黑人猛交 | 日韩精品精品一区二区三区 | 国产午夜手机精彩视频 | 果冻传媒网站入口 | 午夜a级理论片在线播放不卡 | 国产日韩欧美第二页 | 国产一区二区三区四区在 | 免费看h片 | 午夜理论片y | 国产精品免费视频能看 | 国产午夜福利a∨在线机视频 | 欧美日韩亚洲国产精品自拍 | 精品国产一区二区三区香蕉不卡 | 新版资源天堂中文 | a在线视频v视频 | 日本一区二区三区在线观看入口 | 欧美性猛交xxxx乱大交极品 | 日韩不卡高清区二区三区 | 免费三级在线 | 露脸国产自产拍在线观看 | 黄骗在线免费观看 | 欧美老妇多毛 | 99热这里只有精品动漫国产 | 神马影院88 | 91桃色在线| 99亚洲国产综合一区二区 | 国产精品福利在线播放 | 免费60分| 亚洲视频区| 欧美综合精品一区二区二 | 国产原创剧情经理在线播放 | 国产人妖综合在线视频 | 91中文字幕永久在线人妖 | 久热视频在线观看精品 | 最新好看的电影 | 精品国夜夜区二一区三区 | 国产午夜理论片不卡在线观看 | 欧美精品一区二区三区不卡网 | 国产福利vr专区精品 | 午夜三级a三级三点在线观看 | 香蕉视观看在线a | 精品欧美一区二区三区在线 | 国产自产自拍视频 | 国产一级精品视频 | 亚洲精品永久在线观看 | 亚洲b站精品大片网站 | 韩国美女直播福利一区二区 | 产免费一区二区三区视频 | 成人国产精品一区二区八戒网 | 国产偷国产偷亚洲高清日 | 成人天堂资源在线观看 | 韩国精品视频一区二区在线播放 | 亚洲国产妇在线观看 | 国产在线成人91 | 日韩欧美色射高 | 亚洲欧美日韩国产综合专区 | 乱码国产精品 | 亚洲精品亚洲精品亚洲精品日韩 | 国产一区二区三区成人欧美日韩 | 欧美在线观看免费人成 | 成年人午夜免费福利 | 日韩国产欧美亚洲一区不卡 | 制服丝袜欧美中文 | 国产一区二区在线免费观看 | 桃花在线观看视频播放 | 国产日产中文在线视频 | 99在线在线视 | 国产午夜福利正在播放 | 欧美黑人巨大xxxx | 精品费精品国产一区二区 | 精品国产亚洲人成在线观看 | 国产精品一区二区三区自拍喷水 | 中文免费国产综合 | 精品福利私拍 | 国产亚洲精品精华液 | 91美女秘片黄在线观看游戏 | 野花日本大全免费 | 日韩欧美在线 | 奇米777四色成人影视 | 露脸国产自产拍在线观看 | 亚洲欧美激情小说另类 | 国产区日韩精品一区二区三区 | 欧美日韩精品一区 | 性生交生活影碟 | 福利资源在线导航网址 | 国产亚洲精aa在线看 | 欧美日韩深夜视频在线观看 | 国精产品一区二区三区有限 | 欧美日韩国产亚洲一区二区三区 | 区三区不卡 | 91男女免费福利 | 在线观看精品亚洲 | 岛国一区二区三区视频在线观看 | 国产一区二区三区猎奇视频 | 日韩成a| 国产精品视频顷一区 | 乱伦日本影视国产 | 日韩欧美tv一区二区在线观看 | 免费播放婬乱男女婬视频国 | 亚洲国产精品自在拍在线播放 | 国产欧美在线观看精品一区二区 | 精品亚洲欧美v国产一 | 日本一区二区三这在线视频 | 亚洲一区二区在线免费观看 | 精品一精品国产一级 | 欧美野人三级经典在线观看 | 国产极品 | 99精品在线国产观看搜 | 五月丁香婷婷综合激情在线 | 国产偷窥熟女精 | 国产玉足榨精在线观看sm | 91国语精品福利自产拍 | 国产初高中生视频在线观看 | 久青草久青草高清在线播放 | 亚洲影视久 | 无区码一码二码三码 | 欧美白皙视 | 国产精品天美传媒在线观看 | 国产伦国产伦老熟30 | 亚洲亚洲人成综合网络 | 91精品福利资源在线观看 | 日本一区二区三区免费高清视频 | 国产国语对白露脸正在播放 | 色一情一乱一伦一区二区三区 | 精品二区三区三级日韩人妖 | 国产综合视频一区二区三区 | 国产a级三级三区成人国产一级婬 | 精品成人一区二区 | 亚洲日本国产乱码va在线观看 | 国产精品高清一区二区三区不卡 | 日本伊人 | 天堂а√在线地址8中文种子 | 男女h无视频在线免费观看 国产精品爽爽va在线观看 | 日本高清www午色夜在线网站 | 手机免费安装推荐 | 88国产精品欧美一区二区三区 | 成人免费又黄又爽视频 | 欧美肉大捧一进一出免费视频 | 海量资源每 | 国产精品中文字幕免费观看 | 日韩欧美中文字幕综合色 | 欧美日韩在线一本卡 | 在线日韩国产 | 国语自产精品视频一区二区 | 亚洲а∨天堂20 | 成年男人午夜片免费观看 | 欧美日韩国产综合一区二区三区 | 香蕉伊蕉伊中文视频在线 | 亚洲性爱免费网址 | 亚洲国产精品日韩在线观看 | 国产剧情精品v国产在线观看 | 久中文字幕中文字幕亚洲无线 | 一本一本| 超91国在线| 成人福利影视 | 自拍偷拍欧美激情 | 蜜臀98精品国产免费观看 | 亚洲高清激情精品一区国产 | 日本免费人成视频在线观看 | 成视频在线播放免费人成 | 91色在线观看 | 国产最新在线视频91 | 免费mv视频7| 成人性爱视频在线观看 | 变态拳头交视频一区二区 | 国产午夜福利小视频喷水挤奶 | 97在线精品视频免费 | 国产高清免费观看视频 | 国产情侣套 | 愉拍自拍一区首页 | 夜夜橾天天橾 | 中文字幕亚洲欧美 | 在线天堂新版最新版在线8 免费人成网上在线观看 | 国产午夜男女爽爽爽爽爽视频 | 国产精品综合影院在线观看 | 国产高清欧美情侣视频 | 97色伦午夜国 | 日韩精品电影一区 | 国产乱理论片在线观看免费 | 精品一区二区成人 | 337p西西人体大胆瓣开下部 | 欧美高清国产一区二区三区 | 国产精品高清尿 | 成全视频 | 国产丝袜长腿视频第一页 | 国产亚洲欧美另类第一页 | 宅男66lu国产在线观看 | 91国语精品自产拍在线观看 | 91精品第一国产综合精品 | 亚洲十大国产精品污污 | 欧美亚洲性爱电影 | 国产精品欧美精品aⅴ在线 中文一区二区三 | 国产97精品乱码在线观看 | 国产亚洲国语精品自产拍在线 | 另类?欧美?偷窥?日韩?综合 | 国精产品一码一码三mba | 中国字幕在线看韩国电影 | 边做饭边被躁bd | 国产女同一区二区三区五区 | 国产精品色片免费 | 国产乱视频 | 日韩精品一区二区免费在线观看 | 亚洲aⅴ一区二区三区四区 日本三级私人电影网 | 亚洲欧美日韩中文在线制服 | 国产剧情在线一区观看 | 国语对白嫖老妇胖老太 |