WPF and Silverlight 学习笔记(十二):WPF Panel内容模型、Decorator内容模型及其他...
由于園子里昨天使用Live Writer上傳出現問題,昨天只能使用Web上的文本編輯器上傳本文,造成代碼、內容等格式的錯誤,現重發本文。
一、Panel內容模型
Panel內容模型指從System.Windows.Controls.Panel繼承的控件,這些控件都是容器,可以在內部承載其他的控件和子容器。Panel內容模型包含的容器有:
-
Canvas
-
DockPanel
-
Grid
-
TabPanel
-
ToolBarOverflowPanel
-
UniformGrid
-
StackPanel
-
ToolBarPanel
-
VirtualizingPanel
-
VirtualizingStackPanel
-
WrapPanel
對于Panel模型,其包含一個Children屬性,表示其所有的子控件和子容器的集合,在XAML代碼中可以省略<XXX.Children>標記,如:
1: <StackPanel x:Name="mainPanel"> 2: <StackPanel x:Name="panelA"> 3: <StackPanel.Children> 4: <Button>Button A</Button> 5: </StackPanel.Children> 6: </StackPanel> 7: <Button>Button B</Button> 8: <StackPanel x:Name="panelB"> 9: </StackPanel> 10: </StackPanel>也可以通過代碼,動態添加Children中的對象
1: // 定義一個Button 2: Button btn = new Button(); 3: btn.Content = "Button C"; 4:? 5: // 將Button添加到StackPanel中 6: panelB.Children.Add(btn);二、Decorator內容模型
Decorator內容模型指的是從System.Windows.Controls.Decorator類繼承的控件,主要是對其中的一個子元素的邊緣進行修飾。Decorator模型的主要控件包含:
-
AdornerDecorator
-
Border
-
BulletDecorator
-
ButtonChrome
-
ClassicBorderDecorator
-
InkPresenter
-
ListBoxChrome
-
SystemDropShadowChrome
-
Viewbox
Decorator模型包含一個Child屬性,表示其包含的一個子元素(注意,只能是一個子元素(控件或容器,在容器中可以再添加其他的控件)),Child屬性的XAML標記可以省略。
例如,對于一個TextBox添加一個邊框,使用XAML語言定義:
1: <StackPanel x:Name="mainPanel"> 2: <Border BorderThickness="5" BorderBrush="DarkBlue" Margin="5"> 3: <Border.Child> 4: <TextBox Text="TextBox Content"/> 5: </Border.Child> 6: </Border> 7: </StackPanel>也可以使用代碼完成上述功能:
1: // 定義一個Border對象,并設置其邊框的大小,顏色,外邊距 2: Border border = new Border(); 3: border.BorderThickness = new Thickness(5); 4: border.BorderBrush = new SolidColorBrush(Colors.DarkRed); 5: border.Margin = new Thickness(5); 6:? 7: // 定義一個TextBox對象 8: TextBox textBox = new TextBox(); 9: textBox.Text = "TextBox Content Text"; 10:? 11: // 使用Border修飾TextBox的邊框 12: border.Child = textBox; 13:? 14: // 將Border添加到StackPanel中 15: mainPanel.Children.Add(border);
三、TextBlock模型
TextBlock模型實際上指的就是System.Windows.Controls.TextBlock類,它是一個用于顯示少量流內容的輕量控件。其中包含一個InLines屬性,支持 Inline 流內容元素的承載和顯示。 支持的元素包括 AnchoredBlock、Bold(粗體字符串)、Hyperlink(超鏈接,在瀏覽器支持的模式下有效)、InlineUIContainer(承載其他控件的容器)、Italic(斜體字符串)、LineBreak(換行符)、Run(普通字符串)、Span(可以設置字體、顏色等的Span) 和 Underline(下劃線)。
例如:
1: <StackPanel Orientation="Horizontal"> 2: <Border BorderThickness="2" Margin="5" BorderBrush="Black"> 3: <TextBlock Margin="5" TextWrapping="WrapWithOverflow"> 4: <TextBlock.Inlines> 5: <Bold> 6: <Run>BlockText 控件XAML示例</Run> 7: </Bold> 8: <LineBreak/> 9: <Run>TextBlock支持以下的幾種流顯示樣式:</Run> 10: <LineBreak/> 11: <Bold>粗體(Bold)</Bold> 12: <LineBreak/> 13: <Italic>斜體(Italic)</Italic> 14: <LineBreak/> 15: <Underline>下劃線(Underline)</Underline> 16: <LineBreak/> 17: <Hyperlink NavigateUri="http://www.microsoft.com">超鏈接</Hyperlink> 18: <LineBreak/> 19: <Span Foreground="Red" FontSize="18">Span設置字體、顏色等</Span> 20: <LineBreak /> 21: <InlineUIContainer> 22: <StackPanel Background="AntiqueWhite" Margin="5"> 23: <TextBlock>Inline UI 容器</TextBlock> 24: <Button Content="按鈕" Width="80" /> 25: </StackPanel> 26: </InlineUIContainer> 27: </TextBlock.Inlines> 28: </TextBlock> 29: </Border> 30: <Border BorderThickness="2" Margin="5" BorderBrush="Black"> 31: <TextBlock Margin="5" TextWrapping="WrapWithOverflow" x:Name="textBlock"> 32: <TextBlock.Inlines> 33: <Bold> 34: <Run x:Name="title"></Run> 35: </Bold> 36: <LineBreak x:Name="line"/> 37: <InlineUIContainer x:Name="container"> 38: <StackPanel Background="AntiqueWhite" Margin="5" x:Name="panel"> 39: </StackPanel> 40: </InlineUIContainer> 41: </TextBlock.Inlines> 42: </TextBlock> 43: </Border> 44: </StackPanel>使用代碼操作Inlines:
1: // 設置Inline對象的屬性值 2: title.Text = "TextBlock 控件代碼示例"; 3:? 4: // 添加Inline對象 5: Run content = new Run("TextBlock支持以下的幾種流顯示樣式:"); 6: Bold bold = new Bold(new Run("粗體")); 7: Italic italic = new Italic(new Run("斜體")); 8: Underline underline = new Underline(new Run("下劃線")); 9: Hyperlink hyperlink = new Hyperlink(new Run("超鏈接")); 10: hyperlink.NavigateUri = new Uri("http://www.microsoft.com"); 11: Span span = new Span(new Run("Span設置字體、顏色等")); 12: span.Foreground = new SolidColorBrush(Colors.Green); 13: span.FontSize = 18; 14:? 15: textBlock.Inlines.InsertBefore(container, content); 16: textBlock.Inlines.InsertBefore(container, new LineBreak()); 17: textBlock.Inlines.InsertBefore(container, bold); 18: textBlock.Inlines.InsertBefore(container, new LineBreak()); 19: textBlock.Inlines.InsertBefore(container, italic); 20: textBlock.Inlines.InsertBefore(container, new LineBreak()); 21: textBlock.Inlines.InsertBefore(container, underline); 22: textBlock.Inlines.InsertBefore(container, new LineBreak()); 23: textBlock.Inlines.InsertBefore(container, hyperlink); 24: textBlock.Inlines.InsertBefore(container, new LineBreak()); 25: textBlock.Inlines.InsertBefore(container, span); 26: textBlock.Inlines.InsertBefore(container, new LineBreak()); 27:? 28: // 設置InlineUIContainer的成員 29: panel.Children.Add(new TextBlock(new Run("InlineUIContainer"))); 30: Button button = new Button(); 31: button.Content = "Button"; 32: button.Width = 80; 33: panel.Children.Add(button);執行結果:
四、TextBox模型
System.Windows.Controls.TextBox類,實現的是可編輯的文本框,文本框的內容由字符串類型的Text屬性指定,并且整個TextBox的內容使用共同的(即TextBox指定的)樣式。
下載本節的示例代碼
本系列博客索引頁
轉載于:https://www.cnblogs.com/DragonInSea/archive/2009/04/16/1437211.html
總結
以上是生活随笔為你收集整理的WPF and Silverlight 学习笔记(十二):WPF Panel内容模型、Decorator内容模型及其他...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery的radio,checkbo
- 下一篇: PowerDesigner-快速入门(极