內容控件(content control)
內容控件(content control)是更特殊的控件類型,他們可包含並顯示一塊內容。從技術角度看內控控件是可以包含單個嵌套元素的控件。與布局控件不同的是,內容控件只能包含一個字元素,而布局容器只要願意可以包含任意多個嵌套元素。
當然仍可以在當個元素中放置大量內容,訣竅是使用單個容器,比如StackPanel或Grid面板來封裝所有內容。
所有內容控件都繼承自ContentControl。

Content屬性
與Panel類提供的Children集合來保存嵌套的元素不同,Control類添加了Content屬性,改屬性只接受單一對象。

對齊內容
在容器中對齊內容用HorizontalAlignment和VerticalAlignment來對齊控件,然而一旦控件包含了內容,就需要考慮另一個組織級別。需要決定內容控件中的內容和邊框對齊,這是通過使用
HorizontalContentAlignment和VerticalContentAlignment屬性來實現的。
標簽
標簽具有記憶符,記憶符是能夠為連接的控件設置焦點的快捷鍵。
<Label Target="{Binding ElementName=txtA}">Choose A</Label> <TextBox Name="txtA"></TextBox>
如果需要顯示不需要記憶符內容,使用更輕量級的TextBlock元素。TextBlock元素通過它的TextWrapping屬性支持換行。
按鈕 Button
-
IsCancel屬性,true按鈕就成為窗口的取消按鈕。在當前窗口的任何位置如果按下Esc鍵,就會觸發該按鈕。
-
IsDefault屬性,true,按鈕就會成為默認按鈕。默認按鈕具有藍色陰影。如果焦點位於非按鈕控件上,按enter就會觸發默認按鈕。如果焦點在按鈕上就會觸發當前按鈕。
ToggleButton控件和RepeatButton
-
GridViewColumnHeader類,當使用基於網格的ListView控件時,該類可以表示一列可以單擊的標題。
-
RepeatButton類,只要按鈕保存按下的狀態,該類就不斷地觸發Click事件。
-
ToggleButton類,改類表示有兩個狀態(按下按鈕和未按下按鈕)。當單擊ToggleButton時,它會保持按下狀態,直到再次單擊改按鈕以釋放它為止。
CheckBox控件
繼承自ToggleButton,有"開關"行為。
IsChecked:true、false、null。null表示不確定的狀態,帶有陰影的復選框。
<CheckBox IsChecked="{x:Null}">checkbox</CheckBox>
RadioButton
RadioButton類也繼承自ToggleButton類。增加了GroupName屬性,改屬性用於控制如何對單選按鈕進行分組。
單選按鈕通常由它們的容器就行分組。這意味着,如果StackPanel面板中放置三個單選按鈕,那么這三個單選按鈕就形成了一組,而且只能選擇這三個按鈕中的一個。
工具提示
WPF工具提示提供了一個靈活的模型。因為WPF中工具提示是內容控件,所以可在工具提示中放置任何可視化元素。還可以改變各種時間設置來控制工具提示的顯示和隱藏速度。
可為可視化元素設置ToolTip屬性。ToolTip屬性實在FrameworkElement類中定義的,所以有能放到WPF窗口上的元素都可以使用該屬性。
<Button ToolTip="this is a tootip"></Button>
復雜的TooTip
<Grid> <Button MinHeight="30" MinWidth="90" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center"> <Button.ToolTip> <StackPanel> <TextBlock Margin="3">Iamge and text</TextBlock> <Image Source="http://f.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa0af12ccabf8f8c5494ee7b71.jpg"></Image> <TextBlock Margin="3">Iamge and text</TextBlock> </StackPanel> </Button.ToolTip> <Button.Content>test tooltip</Button.Content> </Button> </Grid>

不要在工具提示欄中放置與用戶進行交互的控件,因為ToolTip控件不能接收焦點,如果創建包含其他控件,並與工具提示類似的窗口可考慮用Popup控件。
Popup控件
Popup控件只能包含單一內容,該單一內容可以包含任何WPF元素,改內容存儲在Popup.Child屬性中,而不像ToolTip.Content屬性中。
-
Popup永遠不會自動提示。為顯示Popup控件,必須設置IsOpen屬性。
-
默認情況下,如果PopUp.StaysOpen屬性被設置為true,並且PopUp會一直提示,知道明確的將IsOpen屬性設置為False為止,如果PopUp.StaysOpen屬性被設置為false.那么當用戶在其他地方
點擊鼠標時,那么Popup就會消失。
-
Popup控件提供了PopupAnimation屬性,當IsOpen屬性設置為true時,通過該屬性可控制Popup控件進入視野的方式。需設置AllowsTransparency屬性設置為true。
-
None 默認值
-
Fade彈出窗口的透明度逐漸增加
-
Scroll 彈出窗口將從窗口的左上角滑入。
-
Slide彈出窗口將從上向下滑入。
-
Popup控件可接收焦點。因此,可在其內部放置與用戶交互的控件,該功能是使用Popup控件而不使用Tooltip控件的主要原因之一。
<Popup Name="popLink" StaysOpen="False" Placement="Mouse" MaxWidth="200" PopupAnimation="Slide" AllowsTransparency="True"> <Border BorderBrush="Beige" BorderThickness="2" Background="White"> <TextBlock Margin="10" TextWrapping="Wrap"> text </TextBlock> </Border> </Popup>
ScollViewer
如果希望讓大量的內容適應有限的控件,滾動條是總要屬性之一。
通過代碼進行滾動。
-
LineUp()和LineDawn()向上向下滾動,相當於在滾動滑塊上面單擊滾動條。
-
PageUp()和PageDawn()。這兩個方法向上或向下滾動一整屏。
-
LineLeft()、LineRight()、PageLeft()、PageRight() 水平滾動。
-
ScrollToEnd、ScrollToHome滾到內容的頂部和底部。ScrollToVerticalOffset()。
GroupBox
<GroupBox Header="A Group Box" Padding="5" Margin="5" VerticalAlignment="Top"> <StackPanel> <RadioButton Margin="3">One</RadioButton> <RadioButton Margin="3">Two</RadioButton> <RadioButton Margin="3">Three</RadioButton> <Button Margin="3">Save</Button> </StackPanel> </GroupBox>
TabItem
TabItem表示TabControl空間中的一頁。TabItem類唯一的屬性是IsSelected,改屬性表示選項卡是否顯示在TabControl中。
<TabControl Margin="3"> <TabItem> <TabItem.Header> <StackPanel> <TextBlock Margin="3">Image and Text Tab Title</TextBlock> <Image Source="http://f.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa0af12ccabf8f8c5494ee7b71.jpg"></Image> </StackPanel> </TabItem.Header> <StackPanel Margin="3"> <CheckBox Margin="3">Setting One</CheckBox> <CheckBox Margin="3">Setting Two</CheckBox> <CheckBox Margin="3">Setting Three</CheckBox> </StackPanel> </TabItem> </TabControl>
Expander
封裝了一塊內容,通過小箭頭顯示或隱藏所包含的內容。擴展器的擴展方向默認是Down,但也可以將ExpandDirection屬性設置為Up、Left或Right。
<Expander Margin="5" Padding="5" Header="ReionOne"> <StackPanel Margin="3"> <CheckBox Margin="3">Setting One</CheckBox> <CheckBox Margin="3">Setting Two</CheckBox> <CheckBox Margin="3">Setting Three</CheckBox> </StackPanel> </Expander>
ListBox
ListBox控件是一個非常靈活的控件,它不僅可以包含ListBoxItem對象,也可以駐留其他的任意元素,這是因為ListBoxItem繼承自ConentControl,從而ListBoxItem能夠包含一嵌套的內容。
<ListBox> <ListBoxItem> <Image Source="http://f.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa0af12ccabf8f8c5494ee7b71.jpg"></Image> </ListBoxItem> <ListBoxItem> <Image Source="http://f.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa0af12ccabf8f8c5494ee7b71.jpg"></Image> </ListBoxItem> <ListBoxItem> <Image Source="http://f.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa0af12ccabf8f8c5494ee7b71.jpg"></Image> </ListBoxItem> </ListBox>