內容控件(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就會消失。
-
None 默認值
-
Fade彈出窗口的透明度逐漸增加
-
Scroll 彈出窗口將從窗口的左上角滑入。
-
Slide彈出窗口將從上向下滑入。
<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>