老司机夜插-理伦理片-理伦片免费-理伦片免费观看-理伦片免费看-理伦日韩-理论福利片-理论片第一页-理论片电影-理论片理论

金喜正规买球

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)。縱向的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定義一個區域,在此區域中,您可以使子元素通過描點的形式排列。停靠面板其實就是在WinForm類似于Dock屬性的元素。DockPanel會對每個子元素進行排序,并停靠在面板的一側,多個停靠在同側的元素則按順序排序,最后一個元素填充這個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
熟女乱牛牛视频在线观看 | 九九热热九九 | 久久精品国产福利国产秒 | 另类在线 | 一级毛片60分钟 | 在线免费观看毛片网站 | 亚洲婷婷丁香 | 欧美综合区自拍亚洲综合图 | 亚洲人成图片网站 | 第九影院2017韩国伦理电影 | 国产人妻人伦AV又粗又一长 | 日本国产精品无码一区免费看 | 国产精品刺激好大好爽视频 | 日韩亚洲欧洲在线rrrr片 | 国产特黄特色a级在线视频 国产素人自拍 | 亚洲 色 欧美 爱 视频 日韩 | 成午夜精品一区二区三区精品 | 精品人妻无码一区二区三区狼群 | 亚洲综合AV久久国产精品凡士林 | 亚洲高清在线视频 | 国产一国产一级毛片视频在线 | 抽插内射高潮呻吟爆乳 | 国产成人综合色 | 麻豆免费观看高清完整视频 | 亚洲の无码国产の无码步美 | 国产精品人妻久久无码不卡 | 色拍拍欧美视频在线看 | 免费黄a | 一级毛片免费播放 | 99成人在线| 国产日日夜夜 | 亚洲欧洲中文日韩久久AV乱码 | 香蕉成人啪国产精品视频综合网 | 黄页网站在线观看视频 | 国产精品51麻豆CM传媒 | 日本大胆无码视频XXXXX | 亚洲jizzjizz中文在线播放 | 丝瓜成视频人APP下载网站 | 99久久精品免费看国产一区二区三区 | 欧洲一区| 免费无码又爽又黄又刺激网站 | 2021乱码精品1区2区3区 | 国产高清免费观看 | 一级毛片完整版免费播放一区 | 国产精品久久久久9999小说 | 国产精品岛国久久久久 | 欧美日本中文字幕 | 伊人大香线蕉精品在线播放 | 亚洲日本视频在线 | 美女扒开让男人桶 | 黄色免费网站在线播放 | 欧美在线视频二区 | 国产精品久久久久久久久免费观看 | 又大又爽又硬的曰皮视频 | 亚洲天天做日日做天天看2018 | 日日射天天射 | 国产高潮呻吟无码精品AV | 狠狠精品干练久久久无码中文字幕 | 国产福利2021最新在线观看 | 松岛枫百度影音 | 5566在线资源 | 色阁阁| 抖音无限次短视频老司机APP | 免费女性裸身照无遮挡网站 | 色欲国产麻豆一精品一AV一免费 | 日本一区二区视频 | 日本网站在线播放 | 青草影院内射中出高潮 | 大炕上的肉体乱第2部分 | 少妇交换做爰5 | 国产白丝精品爽爽久久久久久蜜臀 | 日日噜噜夜夜狠狠扒开双腿 | 超碰97av 在线人人操 | 男人天堂2024亚洲男人天堂 | 伦理79电影网在线观看 | 最好看十大无码AV | 少妇高潮毛片免费看A片 | 中文字幕熟女人妻伦伦在线 | 性xxxx奶大欧美高清 | 99好久被狂躁A片视频无码刻晴 | 短篇H爽文小说集大全 | 唐诡2电视剧免费观看 | 国产目拍亚洲精品一区二区三区 | 葫芦娃.combo深夜释放自己 | 亚洲日本一期二期三期精华液 | 精品午夜寂寞黄网站在线 | 欧美一级夜夜爽 | 日韩成人免费在线视频 | 日产免费线路一二区 | 美女脱内衣露出了奶头无马赛克图片 | 国产的一级毛片最新在线直播 | 日本免费一区二区在线观看 | 福利视频导航网址 | 一区二区三区免费观看 | 亚洲欧美精品在线 | 五月天婷婷视频在线观看 | 免费看三级毛片 | 小片网 | 一本久道久久综合狠狠躁AV | 遇见你的那一天 | 91在线看片一区国产 | 亚洲精品无码成人A片在线虐C | 能在线观看的一区二区三区 | 日日操美女 | 女人毛多水多高潮A片 | 正在播放重口老熟女露脸 | 91在线视频在线观看 | 免费看黄色一级 | 亚洲国产日韩欧美一区二区三区 | YELLOW片免费观看高清大全 | h色网站| 欧洲一卡2卡3卡4卡乱码视频 | a级v片| 中文 有码 亚洲 自拍 偷拍 | A片人澡C片人人妻 | 国产精品久久久久久久久齐齐 | 久久亚洲精品国产露脸 | 99热国产这里只有精品6 | 天天黄色 | 日韩无矿砖一线二线 | 久就热视频精品免费99 | 乱子伦小说500短篇 伦 乱真实故事 | 夜夜躁狠狠躁日日躁孕妇 | 女18一级大黄毛片免费女人 | 免费看国产成年无码A片 | 六月丁香六月综合缴情 | 92电影网午夜福利 | 99好久被狂躁A片视频无码刻晴 | dvd8090cnm欧美大片 | 欧洲精品不卡1卡2卡三卡 | 精品综合久久88色鬼首页 | 五月天亚洲图片婷婷 | 黄色在线网页 | 台湾成人影院 | jizzjizz免费| 综合久久久久综合体桃花网 | 综合网天天 | 91影视在线| 日本大片免费视频在线 | 久久国产精品一区免费下载 | 欧美日韩午夜精品不卡综合 | 老司机深夜福利影院 | 中文天堂| 热热涩热热狠狠色香蕉综合 | 粗大的内捧猛烈进出少妇在线播放 | 啊轻点灬大巴太粗太长了动态图 | 强被迫伦姧高潮无码A片漫画 | 日韩精品视频在线免费观看 | 一级毛片黄色 | 午夜亚洲精品久久一区二区 | 91制片厂果冻传媒2022 | www国产91| 日本熟妇人妻另类无码 | 成人做爰WWW网站视频 | 99久久免热在线观看6 | 农夫快播| 777国产| 蜜桃网怎么打不开了 | 把她日出水来太爽太紧了 | 国产精品99久久久久久小说 | 国产一区二区女内射 | 日本三级香港三级网站 | 好紧好湿好爽免费视频在线观看 | 7723日本电影免费观看完整版 | 好大好硬再深一点口述 | 天天干夜夜夜 | 欧美性猛交AAA片免费观看 | 日本免费视频费观看在线 | 日韩精品中文字幕在线 | 色琪琪av男人的天堂 | 漂亮人妻被公日日躁国产 | 国产制服一区 | 国产日产韩国视频18禁 | 亚洲女bbwxxxx另类 | 日韩亚洲欧美日本精品va | 在线理论视频 | 亚洲欧美强伦一区二区另类 | 亚洲精品沙发午睡系列 | 国产精品久久久精品a级小说 | 五月天婷婷丁香 | 亚洲免费三级 | 亚洲夜夜爱 | 色婷婷在线视频 | 成人无码免费A片免费看软件 | 成人视品 | 雯雅婷4去码截图 | 久久AV国产麻豆HD真实乱 | 99九九99九九九视频精品 | 99re5在线精品视频热线 | 国产美女主播一级成人毛片 | 国产精品乱码色情一区二区视频 | 欧美黑人性受xxxx精品 | 被拖进小树林C了好爽H出租车 | 精品久久久久久久久免费影院 | 亚洲欧美中文无码蝴蝶 | 麻豆一卡2卡三卡4卡网站在线 | 好男人视频社区精品免费 | 丁香婷婷激情综合 | 欧美日韩91 | 黄色网址在线免费播放 | ts人妖在线观看 | 六月成人网 | 玖玖色资源 | 好男人社区神马WWW在线观看 | 一个人观看的免费视频 | 久久91精品国产91久久户 | 亚精产品一三三三菠萝蜜 | 色噜噜噜亚洲男人的天堂 | 黄色免费观看网站 | 制服师生一区二区三区在线 | 欧美丰满大乳无码少妇 | 国产在线二区三区熟女A级 国产在线播放精品视频 | 日b视频在线观看 | 抖音app国产污 | 日本一区二区三区无码苍井空 | 最近最新中文字幕免费1 | 亚洲欧美日韩中文在线制服 | 青草草在线观看免费视频 | 久久视频在线视频观看2019 | 在线观看午夜亚洲一区 | 国产精品福利影院 | 99久久精品免费看国产免费软件 | 一级am片欧美 | 免费在线观看黄色网址 | 久久伊人亚洲 | 国产成+人+综合+亚洲专 | 极品美女扒开粉嫩小泬图片 | 久久国产欧美日韩精品免费 | 在线观看高清电影 | 少妇饥渴无码高潮A片爽爽小说 | 娇喘呻吟欲仙欲死的娇妻 | 成人导航网站 | 色情成人吃奶激情视频在线播放 | 中文字幕乱码免费专区 | 久久久精品久久 | 亚洲国产精华液 | 草莓丝瓜视频下载-丝瓜视18岁 | 激情综合在线观看 | 欧洲免费在线视频 | 91精品国产高清久久久久 | 美女脱内衣露出了奶头无马赛克图片 | 四虎免费最新在线永久4HU | 欧美中文一区 | 久热这里只精品热在线观看 | 好男人好资源www社区 | 国产精品剧情 | 很黄很色吸奶头A片动态图 狠狠撸的网站首页 | 饥渴的少妇黑人在线观看 | 苍井空a 集在线观看网站 | 久久亚洲精品AV成人无码 | 精品乱码一区二区三区四区 | 美女免费视频一区二区 | 国产成人一区二区三区在线观看 | 一区二区三区好的精华液杨朝越 | 久久午夜免费鲁丝片 | 一本到在线高清观看 | 亚洲激情中文 | 丝袜亚洲另类欧美变态 | 色哟哟精品网站在线观看 | 最大 成人 综合 | 欧美变态口味重另类牲交视频 | 国产精品久久久久久搜索 | 国产成人手机视频 | 久久亚洲人成网站 | 国产精品免费一级在线观看 | 肉肉高文干翻天 | 在线看片av以及毛片 | 久久lu| 嗯啊灬别停啊灬用力灬快 | 中国XXX孕妇做爰 | 国产一区二区三区免费大片天美 | 快播人人看电影网 | 无码做爰视频WWW网站建设 | 色系工口里番大全全彩 | 日韩精品AV一区二区三区 | 色哟哟在线观看免费高清大 | 欧美与黑人午夜性猛交久久久 | 欧美午夜精品A片一区二区HD | 禁止的爱善良的小峓子3线国字 | 色情成人免费视频激情在线观看 | 日本女人毛茸茸 | 高清偷自拍第1页 | 无人高清视频免费观看在线下载 | 亚洲免费黄色网址 | 香蕉人人超人人超免费看视频 | 69精品视频 | 激情婷婷六月 | 中文字幕日本一区 | 纯肉无码AV在线看免费看 | 亚洲中文字幕琪琪在线 | 三个老外与一女做爰A片 | 国产一级第一级毛片 | 在线视频精品一区 | 六月丁香久久丫 | 国产一卡2卡3卡4卡精品 | 最新日本中文字幕 | 内射精品无码中文字幕 | 毛片在线看片 | 免费黄色一级片 | 久久爱色综合天天综合网 | 亚洲伊人成色综合网 | 国产人妻系列无码专区97SS | 韩国日本不卡高清免费视频 | 亚洲熟妇AV乱码在线观看 | 国产精品久久久天天影视香蕉 | 久久精品亚洲综合一品 | 又色又爽又黄的A片免费看苍井空 | 果冻传媒和91制片厂 | 中文无码有码亚洲 欧美 | 欲色影视天天一区二区三区色香欲 | 伊人亚洲AV久久无码精品 | 老熟女强人国产在线播放一区 | 欧美又硬又粗进去好爽A片 欧美在线视频一区 | 公嗲嗯啊轻点公大ji巴 | 国产麻豆放荡AV剧情演绎 | 99视频网站 | 伊人22综合网 | 漂亮少妇高潮A片XXXX | 久久精品免费大片国产大片 | 极品妇女扒开粉嫩小泬 | 亚洲精品无码一区二区三区网雨 | 欧美高h视频 | 99re6免费视频 | 爱操综合网| 国产精品天干在线观看 | 两个人免费视频在线观看直播 | 免费视频国产在线观看网站 | 成人免费毛片网站 | 中国毛片免费看 | 日韩精品无码二三区A片 | 日本网站av地址 | 亚洲AV无码一区二区三区乱子伦 | 小泽玛利亚全集快播 | 秋霞在线观看视频一区二区三区 | 一本久道久久综合久久鬼色 | 亚洲凤凰av免费观看 | 亚洲第一区第二区 | 亚洲清纯自偷自拍另类专区 | 韩国伦理在线电影免费观影网站 | 日本精品99 | 老头把我添高潮了A片故 | 亚洲护士老师的毛茸茸 | 国产一区二区三区在线视频 | 韩国高清大片免费观看在线第9集 | 日韩一区二区三区免费体验 | 成人免费一区二区无码视频 | 三级毛片免费观看 | 国产精品久久永久免费 | 丁香六月综合网 | 无码人妻丰满熟妇啪啪区日韩久久 | 久久国内精品自在自线 | 2019久久久最新精品 | 中文字幕久久第13页 | 亚洲欧洲日产国无高清码图片 | 久久桃花 | 国产熟妇搡BBBB搡BBBB搡 | 国产品无码一区二区三区在线 | 黄色在线视频网址 | 99久久免费精品国产免费高清 | 国产无遮挡又黄又爽免费网站 | 久久精品国产400部免费看 | 在线国产中文字幕 | 91情国产l精品国产亚洲区 | 天堂а√中文最新版地址 | 99精品视频在线免费观看 | 九九热在线观看视频 | 精品中文字幕在线观看 | 精品日韩在线 | 国产男人的天堂在线视频 | 国产真人做爰免费视频 | 涩涩97在线观看视频 | 九色综合伊人久久富二代 | 最近免费中文字幕大全免费 | 伧理片午夜伧理片毛片日本 | 中文幕无线码中文字蜜桃 | 成人影院线在线观看免费观看 | 97人视频国产在线观看 | www.av在线.com| 从零开始的异世界生活第一季 | v天堂 | 嫩草影院一二三区入口首页 | 美女搭车色诱司机 | 欧美写真视频一区 | 思思久久99热只有频精品66 | 国产强伦姧人妻一区二区 | 91福利一区| 国产乱码人妻一区二区三区 | 吉吉影音先锋av资源网 | 色狠狠亚洲爱综合网站 | 女人高潮内射99精品 | 婷婷久操 | 自拍 亚洲 偷拍 青涩 | 韩国羞羞秘密教学子开车漫书 | 国产毛片久久精品 | 99国精产品品质溯源网 | 2024天天拍拍天天爽视频 | 日本高清免费一本视频无需下载 | 亚洲 校园 春色 另类 图片 | 国产真实夫妇4P交换A片 | 小黄文纯肉污到你湿 | 亚洲色欲色欲综合网站 | 最近韩国日本免费观看 | 国产视频久久久久 | 五月天婷婷综合网 | 欧美一级高清在线观看 | 美女解开胸衣露出奶头的游戏 | 免费中文字幕囯产在线网站 | 国产69式A片 | 欧美熟妇无码XXXXXX | 日本三级韩国三级韩级在线观看 | 亚洲日本免费 | 精品美女国产互换人妻 | 伦理电影在线 | 成人午夜亚洲影视在线观看 | 插的痛的视频一卡二卡三卡 | 久久亚洲精品AV无码四区 | 91成人午夜精品福利院在线观看 | 精品深夜AV无码一区二区老年 | 最新日韩中文字幕 | 福利500精品导航大全 | 在线岛国片免费观看无码 | 狠狠综合久久久久综合 | 欧美乱妇色情大片在线观看免费 | 人人射人人爱 | 久久草免费线看线看2 | 久久久国产免费影院 | 视频二区 中文字幕 欧美 | 天天干干天天 | 免费又粗又黄又爽又免费A片 | 又硬又粗又大一区二区三区视频 | 97碰碰碰免费公开在线视频 | 插的痛的视频一卡二卡三卡 | 色悠悠| 亚洲综合婷婷 | 日韩成人在线播放 | 国产色情无码网站视频APP | 欧美又大又粗毛片多喷水 | 国产色情久久久久久久久 | xxxx性欧美高清3d | 天天操天天干天天舔 | 国产剧情原创中文片在线 | 国产AV亚洲精品久久久久 | 麻豆AV传媒在线播放免费观看 | 亚洲成a人v欧美综合天堂下载 | 日本高清视频色wwwwww色 | 亚洲精品久久久久久成人 | 国产在线欧美精品中文一区 | 欧美性生交XXXXX无码久久久 | 国产91综合 | 天天干天天添 | 蜜桃在线线免费观看视频 | 疯狂揉小泬到失禁高潮AV | 亚洲 欧洲 视频 伦小说 | 久久久久久久99精品免费 | 欧洲无人区卡一卡二卡三 | 成人国产精品免费视频 | 舔插视频 | 久久亚洲一区二区 | 国产精品一区在线免费观看 | 操美女视频在线观看 | аⅴ资源中文在线天堂 | 青青草18在线视频免费 | 99在线国产视频 | 国产一区二区三不卡高清 | 黄色在线免费 | 艳妇臀荡乳欲伦岳TXT免费下载 | 91se在线视频 | 亚洲中文字幕乱码熟女在线 | 在线成年av动漫电影 | 日本免费不卡在线一区二区三区 | 麻豆传传媒久久久爱 | 午夜精品一区二区三区在线观看 | 国产喂奶300部 | 自由夫人在线观看 | 久久综合伊人中文字幕 | 五月天亚洲 | 色点的小说 | 亚洲一级毛片视频 | 草莓视频app深夜福利 | 日本无码MV免费视频在线 | 久久视频精品3线视频在线观看 | 97超级碰久久久久香蕉人人 | 麻豆精品一区二正一三区 | 91av影院| 麻豆文化传媒官方网站 | 伊人中文字幕在线观看 | 永久免费观看国产裸体美女 | 亚洲精品无码高潮喷水A片在线 | 菠萝蜜BLM新区口 | 99久久国产露脸国语对白 | 日本一区二区高清免费不卡 | 欧美影院入口 | 国产在线不卡一区 | 亚洲大码熟女在线 | 久青草国产手机视频免费观看 | 中出欧美 | 亚洲mv日韩mv欧美mv | 影音先锋av在资源天堂 | 99热黄色 | 成人全黄三级视频在线观看 | 天天插天天狠天天透 | 亚洲桃色天堂网 | 夜夜春影院 | 欧美精品中文字幕亚洲专区 | 人妻献身系列第54部 | 国内精品久久久久久网站 | 蜜桃97ai | 久久久免费看少妇高潮A片特黄 | 国产日韩欧美在线视频一本到 | 四虎精品成人影院在线观看 | 丰满五十路熟女正在播放 | 爱你几何在线观看 | 中文文字幕文字幕亚洲色 | 国产成人在线播放 | 亚洲人成在线播放 | 最近电影手机在线影院 | 一本大道一卡二卡三卡 视 一本大道一卡二卡三卡四卡在线观 | 和漂亮老师做爰5中文字幕 黑巨茎大战俄罗斯白人美女 | 日本黄页免费 | 日韩在线永久免费播放 | 日韩一卡2卡三卡4卡无卡网站 | WW网站女生福利 | 久久综合九色综合国产 | 日本成人一区 | 极品销魂一区二区三区 | 国产剧情一卡二卡麻豆 | 永久免费看A片在线直播 | 五月丁香六月综合缴情基地 | 婷婷色网站 | 狠狠亚洲丁香综合久久 | 青青草免费手机在线视频亚洲视频 | 丁香五月综合缴清中文 | 欧美日本高清动作片www网站 | 又色又爽又黄的在线视频免费看 | 最新版天堂资源中文官网 | 99国产精品人妻无码网站 | 99久久免热在线观看 | 男人J进入女人P呻吟视频免费 | 国产麻豆老师在线观看 | www.黄色在线观看 | 成年黄网站在线观看免费 | 美国vps毛片 | 国产成人在线精品 | 欧美1区2区3区 | 日韩h视频 | 亚洲网站大全 | 国产精品久久久久久小说 | 欧洲bbbbb| 97超碰A片人人爽人人澡97 | 免费看片A级毛片免费看 | yellow字幕网 中文字幕 | 亚洲日韩在线a视频在线观看 | 55夜色66成年视频观看免费 | 亚洲AV无码一区二区三区乱子伦 | 日产一卡二卡乱码免费 | 久久精品国产久精国产 | 欧美日韩精品一区二区三区四区 | 久久精品伊人波多野结 | 经典国产乱子伦精品视频 | 精品国产乱码久久久久久下载 | 亚洲国产精品v在线播放 | 天天干天天做天天操 | 99亚洲狠狠色综合久久位 | 天天做夜夜做久久做狠狠 | 天美传媒国产今日推荐 | 欧美阿v天堂视频在99线 | caoporn成人免费视频 | 亚洲一区精品在线 | 老湿英视在现看免费 | 性做久久久久久坡多野结衣 | 宋徽宗是南宋还是北宋 | 韩国男人的天堂 | 免费一级毛片不卡在线播放 | 久久久久久久岛国免费播放 | 日本生活片69视频 | 欧美一区亚洲 | 中文国产成人精品久久app | 一本久道久久综合婷婷五月 | 无套内谢少妇毛片A片免费视频 | jizz在线观看免费高清 | 日韩内射美女片在线观看网站 | 一卡二卡3卡4卡免费 | chinese国产乱在线观看 | 最近最好看的中文字幕1 | 亚洲毛茸茸| 国产精品成人四虎免费视频 | jizzjizz在线观看| 在线看不卡日本AV | 免费黄色电影观看 | 国产香蕉视频在线 | 一本二本三本AV亚洲电影 | 亚洲 日韩 国产 有码 不卡 | 亚洲一线二线三线品牌精华液久久久 | 人人爽久久久噜噜噜丁香AV | 久久视频这里只精品18 | 欧美综合亚洲图片综合区 | 98久久无码一区人妻A片蜜 | 2019久久久最新精品 | 在线观看免费黄色小视频 | 久草中文视频 | 中文字幕国产在线观看 | 欧美精品亚洲精品日韩专区 | 人妻在客厅被C的呻吟 | 欧美大片日韩精品四虎影视 | 伊人大香人妻在线播放 | 高清性色生活片免费播放网 | 国产美女一级做视频爱 | 大片免免费观看视频播放器在线观看 | 日韩精品亚洲专在线电影 | 九九九久久久 | 9 1 视频在线| 优雅美妇疯狂迎合娇吟 | 一女被两根凶猛挺进动态图 | xxx中国bbbwww| 另类图片 亚洲 | 日本一区二区三区在线看 | 日本加勒比在线精品视频 | 日韩国产免费一区二区三区 | 三级国产色情伦在线观看 | 无码免费人妻A片AAA毛片 | 黑帮少爷爱上我第一季在线观看 | 国产三级在线播放不卡 | 在线国产三级 | 妺妺晚上吃我精子黄文 | 国产高清免费视频免费观看 | 一级毛片60分钟 | 人人干人人澡 | 成人国产精品免费软件 | 人妻熟妇乱又伦精品视频中文字幕 | 亚洲成A人无码亚洲成WWW牛牛 | 无遮挡18禁羞羞视频免费动漫 | 性生交大片免费看A片 | 女人高潮A片春色 | 樱花草WWW日本在线观看 | 国产成人精品一区二区 | 亚洲丰满熟妇XXXX性A片 | 亚洲第一综合天堂另类专 | 狠狠色噜噜狠狠狠狠色综合网 | 亚洲色四在线视频观看 | 永久免费看黄A片无码软件 永久免费毛片 | 国产免费黄色 | 波多野结衣中文字幕视频 | 纯肉合集(高H) | 欧美日b| 青青草视频app在线播放99 | 三级毛片在线免费观看 | 国产一级视频 | 午夜视频在线观看一区二区 | 天天色 | 麻花传媒MD01 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美3d怪物交videos网站 | 欧美叉叉叉BBB网站 欧美成 人 网 站 免费 | 美女把尿口扒开让男人桶 | 日产亚洲一区二区三区 | 国精品人妻无码一区二区三区牛牛 | 久久视频在线视频观看2019 | 伦理电影v男人天堂 | A片高潮抽搐揉捏奶头视频在线看 | 真人视频一级毛片 | 成人国内精品久久久久影院 | 岛国黄色网址 | 公用玩物(NP双XING总受) | 国产精品爽爽久久久久久无码 | 免费国产成人高清在线观看网站 | 黄页网站在线视频免费 | 加勒比テカ痴女の猛烈交尾 | 蝶恋直播www免费看 丁丁影院 | 国产在线精品视频免费观看 | WWW日韩AV免费高清看 | 99久久久无码欧美精品性 | 亚洲AV无码专区国产精品麻豆 | 窝窝午夜色视频国产精品东北 | 亚洲精品一区久久久久久 | 一本大道道香蕉a | 国产日产亚洲欧美综合另类 | 欧美亚洲午夜 | 可以免费观看的电影网 | 深夜国产成人福利在线观看女同 | 久草免费福利资源站在线观看 | 二级片免费看 | 国产日本欧美在线观看 | 桃花久久 | 午夜性啪啪A片免费AAA毛片 | 人妻熟妇乱又伦精品视频中文字幕 | 日产国产精品久久久久久 | 悠悠资源 | 韩国三级大全久久网站中文字幕 | 亚洲欧美综合中文 | 麻豆网 | 亚洲第一天堂网 | 美女脱内衣露出了奶头无马赛克图片 | 日本在线观看中文 | 一级α一级α片免费观看网站 | 亚洲欧美精品在线 | 影音先锋2024av资源网 | 亚洲精品国产A久久久久久 亚洲精品第一区二区APP | 国产入口在线观看 | 奇米四色网 | 国产精品一区二区AV交换 | 一区二区三区不卡在线观看 | 午夜伦理伦理片在线观 | 国产伦精品一区二区三区在线观看 | 韩国视频一区 | 富二代精品短视频在线 | 求免费黄色网址 | 777奇米影视四色永久 | 国产日产欧产精品精品APP | 日本理伦片午夜理伦片 | 亚洲国产欧美另类 | 中文字幕久久熟女人妻AV免费 | 内射精品无码中文字幕 | 丰满的女邻居在线观看 | 中文字幕一区二区三区在线观看 | 国产成人午夜精品5599 | 成人另类视频 | 99在线免费观看视频 | 日韩大片在线永久免费观看网站 | 97高清| 毛片免费观看 | chinese老太交视频在线观看 | 亚洲高清毛片一区二区 | 泷泽萝拉 qvod | 男人天堂网夜色99视频 | 最新中文字幕在线资源 | 嗯灬啊灬用力再用力翁公 | 久久精品a国产一级 | 国产理论剧情大片在线播放 | 九九精品成人免费国产片 | 一本大道中文无吗 | 饥渴偷公乱第400章 激烈娇喘叫床声床震爽文 激情aa视频试看免费 | 精品人妻无码一区二区三区GIF | 日本黄色一级网站 | 日本不卡免费视频新二区 | 亚洲综合久久1区2区3区 | 亚洲午夜无码毛片AV久久京东热 | 美女午夜福利4K视频在线观看 | 免费理伦电影 | 91草草| 波多野结衣一区2区3区 | 午夜视频在线网站 | 日韩一卡2卡三卡4卡无卡网站 | 波多野结衣亚洲一区二区三区 | 欧美一级欧美一级在线播放 | 男人狂躁女人A片免费网站 男人猛躁进女人的毛片A片 | 日本无码精油按摩WWW视频 | 亚洲午夜久久久久久91 | 欧美影视一区 | 国产黄A片免费网站免费 | 亚洲五月综合 | 高h3p| 无码日本被黑人强伦姧视频 | 国产 高速 亚洲 欧美 在线 | 日韩一卡2卡3卡4卡乱码免费 | 国产精品九九免费视频 | 免费永久观看美女视频网站网址 | 欧美激情中文字幕一区二区 | 九一视频app | 婷婷六月天激情 | 91福利院| 直接看的成人无码视频网站 | 最近大片 | 一级毛片日韩 | 久久精品视在线看1 | 国产又硬又粗进去好爽A片软件 | 蜜臀AV色欲A片无码一区二区 | 免费网站国产 | jizz日本老师jizz在线播放 | 欧美黄色网络 | 久久亚洲精品高潮综合色A片小说 | 好硬好湿好大再深一点动态图 | 京野结衣免费一区二区 | 少妇伦子伦精品无吗 | 午夜视频在线播放 | 在线黄色毛片 | 日韩欧美福利视频 | 亚洲欧美日韩在线观看一区二区三区 | 亚洲精品无码国产一区二区 | 亚洲免费资源 | 午夜国产片| 波多野结衣中文字幕视频 | 导航福利在线 | chinafree×性护士vidos | 永久黄网站色视频免费 | 69SEX久久精品国产麻豆 | 亚洲精品无码AV一区二区 | 色老头色老太aaabbb | 国产黄A片在线观看永久免费麻豆 | 亚洲成av人在线视 | 午夜福利试看120秒体验区 | 纯h超级大尺度小黄文 | 亚洲午夜精品久久久久久app | 日日摸夜夜添夜夜添影院视频 | 偷偷色在线 男人天堂 | 黄色爱爱| 九九热线有精品视频86 | 日韩欧美一区二区三区四区 | 99久久免费精品国产免费高清 | 日韩精品射精管理在线观看 |