WPF 10天修煉 第五天- 內容控件

WPF內容控件

  在WPF中,全部呈如今用戶界面上的對象都稱爲用戶界面元素。可是隻有派生自System.Windows.Controls.Control類的對象才稱爲控件。內容控件一般是指具備Content屬性的控件,Content屬性並不是定義在每一個控件中,而是定義在基類System.Windows.Controls命名空間的ContentControl類中。注意:Content屬性只接收單個內容元素。express

WPF內容控件分類app

一、  直接繼承ContentControl的控件框架

二、  繼承HeaderedContentControl的控件工具

三、  繼承ItemsControl的控件佈局

四、  繼承HeaderedItemsControl的控件spa

 

直接繼承ContentControl的控件3d

  也能夠成爲單項內容控件,這種控件只能指定一個內容元素。WPF中包含的單項內容控件:orm

  Button:按鈕控件xml

  CheckBox:複選框控件對象

  ComboBoxItem:單選框列表項

  ContentControl:內容控件的基類

  Frame:頁框架

  GridViewColumnHeader:按鈕控件的標題頭

  GroupItem:組合框的組合項。

  Label:標籤控件。

  ListBoxItem:列表項。

  ListViewItem:列表視圖項。

  NavigationWindow:導航窗口。

  RadioButton:單選按鈕。

  RepeatButton:重複按鈕。

  ScrollViewer:滾動查看器,或稱爲滾動面板。

  StatusBarItem:狀態項。

  ToggleButton:選中按鈕。

  ToolTip:提示控件。

  UserControl:用戶控件。

  Window:WPF窗口

 

繼承HeaderedContentControl的控件

         這類控件包含一個標頭和一個內容項目。HeaderedContentControl類派生自ContentControl,繼承了其Content屬性,同時又定了類型Object的Header屬性。Header提供了控件的標頭。WPF中包含的這類控件有3個:

Exapander:帶標題的摺疊控件。

GroupBox:組合框控件。

TabItem:這是TabControl控件內的一個Tab項。

 

繼承ItemsControl的控件

         這類控件包含一個內容項的集合。例如ListBox控件就是一個典型的ItemsControl控件,該控件具備ListBxItem內容項的集合。

 

繼承HeaderedItemsControl的控件

         該類控件包含一個標頭和一個內容項的集合。HeaderedItemsControl類繼承ItemsControl類。在WPF中有3個這種類型的控件。

         MenuItem:菜單項控件。

         ToolBar:工具條控件。

         TreeviewItem:樹狀圖。

Content屬性

WPF中的Content屬性可接收的對象分爲兩大類:

一、  繼承自UIElement基類的對象:UIElement定義了WPF中的佈局、輸入及路由等。是WPF的核心子系統。這種類型的對象具備可視化特性,WPF將使用UIElement.OnRedner方法來顯示派生自該類的對象,OnRender方法將生成一個繪圖呈現,在須要時進行繪製。

二、  繼承自其餘類的對象:WPF的處理方法很簡單,經過調用該對象的ToString方法來顯示一行文本。

 

內容容器控件

ScrollViewer滾動條控件

<Window x:Class="WPFDemo.ScrollViewerDemo"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WPFDemo"

        mc:Ignorable="d"

        WindowStartupLocation="CenterScreen"

        Title="ScrollViewerDemo" Height="300" Width="300"> 

    <ScrollViewer>

        <Grid Height="400">

            <Grid.RowDefinitions>

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

            </Grid.RowDefinitions> 

            <Button Name="button1" Content="button1" Grid.Row="0"></Button>

            <Button Name="button2" Content="button2" Grid.Row="1"></Button>

            <Button Name="button3" Content="button3" Grid.Row="2"></Button>

            <Button Name="button4" Content="button4" Grid.Row="3"></Button>

            <Button Name="button5" Content="button5" Grid.Row="4"></Button>

        </Grid>

    </ScrollViewer>

</Window>

 

默認狀況下ScrollViewer老是顯示一個垂直的滾動條。能夠經過調整VerticalScrollBarVisibility屬性來設置滾動條的顯示方式。也可使用HorizontalScrollBarVisibility屬性設置水平滾動條的顯示方式。

<ScrollViewer  Width="100">

        <Grid Height="400">

            <Grid.RowDefinitions>

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

            </Grid.RowDefinitions>

            <Button Name="button1" Content="button1" Grid.Row="0" Width="200"></Button>

            <Button Name="button2" Content="button2" Grid.Row="1" Width="200"></Button>

            <Button Name="button3" Content="button3" Grid.Row="2" Width="200"></Button>

            <Button Name="button4" Content="button4" Grid.Row="3" Width="200"></Button>

            <Button Name="button5" Content="button5" Grid.Row="4" Width="200"></Button>

        </Grid>

    </ScrollViewer>

 

設置橫向滾動條顯示

<ScrollViewer  Width="100" HorizontalScrollBarVisibility="Auto">

        <Grid Height="400">

            <Grid.RowDefinitions>

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

                <RowDefinition />

            </Grid.RowDefinitions> 

            <Button Name="button1" Content="button1" Grid.Row="0" Width="200"></Button>

            <Button Name="button2" Content="button2" Grid.Row="1" Width="200"></Button>

            <Button Name="button3" Content="button3" Grid.Row="2" Width="200"></Button>

            <Button Name="button4" Content="button4" Grid.Row="3" Width="200"></Button>

            <Button Name="button5" Content="button5" Grid.Row="4" Width="200"></Button>

        </Grid>

    </ScrollViewer>

 HorizontalScrollBarVisibility屬性和VerticalScrollBarVisibility這兩個屬性都是ScrollBarVisibility枚舉類型的值。下表是ScrollBarVisibility枚舉值:

枚舉值

描述

Disabled

禁止顯示滾動條,即便當前視圖區域沒法顯示全部內容,滾動條也不出現

Auto

當前視圖區域能夠容納全部內容時,不顯示滾動條,不然自動顯示滾動條。

Hidden

隱藏滾動條的顯示,可是用戶能夠經過鍵盤等進行滾動。該屬性主要用於自定義滾動方式。

Visible

不管如何滾動條都會顯示。

 

 

使用下面實例演示ScrollViewer自定義滾動

<Window x:Class="WPFDemo.ScrollViewerDemo_CustomPage"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WPFDemo"

        mc:Ignorable="d"

        Title="ScrollViewerDemo_CustomPage" Height="300" Width="300">

    <DockPanel Background="AliceBlue">

        <TextBlock DockPanel.Dock="Top" Text="ScrollViewer 自定義滾動" FontSize="20" Background="AntiqueWhite" Margin="10"></TextBlock>

        <TextBlock DockPanel.Dock="Top" Text="使用左側按鈕進行翻頁" FontSize="20" Background="AntiqueWhite" Margin="10"></TextBlock>

        <StackPanel DockPanel.Dock="Left" Width="150" Background="Aqua">

            <Button Name="btnLineUp" Content="向上滾動"    Margin="10" Padding="10" Click="btnLineUp_Click" />

            <Button Name="btnLineDown" Content="向下滾動"  Margin="10" Padding="10" Click="btnLineDown_Click" />

            <Button Name="btnLineLeft" Content="向左滾動"  Margin="10" Padding="10" Click="btnLineLeft_Click" />

            <Button Name="btnLineRight" Content="向右滾動" Margin="10" Padding="10" Click="btnLineRight_Click" />

            <Button Name="btnPageUp" Content="向上翻頁"    Margin="10,30,10,10" Padding="10" Click="btnPageUp_Click" />

            <Button Name="btnPageDown" Content="向上翻頁"  Margin="10" Padding="10" Click="btnPageDown_Click" />

            <Button Name="btnPageLeft" Content="向左翻頁"  Margin="10" Padding="10" Click="btnPageLeft_Click" />

            <Button Name="btnPageRight" Content="向右翻頁" Margin="10" Padding="10" Click="btnPageRight_Click" />

        </StackPanel>

        <StackPanel DockPanel.Dock="Left" Width="150" Background="Aqua">

            <Button Name="btnLineHome" Content="回到首行"    Margin="10" Padding="10" Click="btnLineHome_Click" />

            <Button Name="btnLineEnd" Content="回到尾行"    Margin="10" Padding="10" Click="btnLineEnd_Click" />

            <Button Name="btnColumnHome" Content="回到首列"    Margin="10" Padding="10" Click="btnColumnHome_Click" />

            <Button Name="btnColumnEnd" Content="回到尾列"    Margin="10" Padding="10" Click="btnColumnEnd_Click" />

            <Button Name="btnLineOffsetUp" Content="向下偏移3個單位"    Margin="10,30,10,10" Padding="10" Click="btnLineOffsetUp_Click" />

            <Button Name="btnColumnOffsetRight" Content="向右偏移3個單位"    Margin="10" Padding="10" Click="btnColumnOffsetRight_Click" />

            <Button Name="btnLineOffsetDown" Content="向上偏移3個單位"    Margin="10" Padding="10" Click="btnLineOffsetDown_Click" />

            <Button Name="btnColumnOffsetLeft" Content="向左偏移3個單位"    Margin="10" Padding="10" Click="btnColumnOffsetLeft_Click" />

        </StackPanel>

        <Border Width="500" Height="400" BorderThickness="2" Background="Beige"  VerticalAlignment="Top" HorizontalAlignment="Left">

            <ScrollViewer Name="SVText" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible">

                <TextBlock Name="txtText" Width="800" Height="900" TextWrapping="Wrap"></TextBlock>

            </ScrollViewer>

        </Border>

    </DockPanel>

</Window>

添加後臺代碼

namespace WPFDemo
{
    /// <summary>
    /// ScrollViewerDemo_CustomPage.xaml 的交互邏輯
    /// </summary>
    public partial class ScrollViewerDemo_CustomPage : Window
    {
        public ScrollViewerDemo_CustomPage()
        {
            InitializeComponent();
            BindText();
        }
        public void BindText()
        { 
            for (int i = 0; i < 1000; i++)
            {
                txtText.Text += i + "\r\n";
            }
        }

        private void btnLineUp_Click(object sender, RoutedEventArgs e)
        {
            SVText.LineUp();
        }
         
        private void btnLineDown_Click(object sender, RoutedEventArgs e)
        {
            SVText.LineDown();
        }

        private void btnLineLeft_Click(object sender, RoutedEventArgs e)
        {
            SVText.LineLeft();
        }

        private void btnLineRight_Click(object sender, RoutedEventArgs e)
        {
            SVText.LineRight();
        }
         
        private void btnPageUp_Click(object sender, RoutedEventArgs e)
        {
            SVText.PageUp();
        }

        private void btnPageDown_Click(object sender, RoutedEventArgs e)
        {
            SVText.PageDown();
        }

        private void btnPageLeft_Click(object sender, RoutedEventArgs e)
        {
            SVText.PageLeft();
        }

        private void btnPageRight_Click(object sender, RoutedEventArgs e)
        {
            SVText.PageRight();
        }

        private void btnLineHome_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToHome();
        }

        private void btnLineEnd_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToEnd();
        }

        private void btnColumnHome_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToLeftEnd();
        }

        private void btnColumnEnd_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToRightEnd();
        }

        private void btnLineOffsetUp_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToVerticalOffset(SVText.VerticalOffset + 3);
        }

        private void btnColumnOffsetRight_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToHorizontalOffset(SVText.HorizontalOffset + 3);
        }

        private void btnLineOffsetDown_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToVerticalOffset(SVText.VerticalOffset - 3);
        }

        private void btnColumnOffsetLeft_Click(object sender, RoutedEventArgs e)
        {
            SVText.ScrollToHorizontalOffset(SVText.HorizontalOffset - 3);
        }
    }
}

 

GroupBox組合框

<Window x:Class="WPFDemo.GroupBoxDemo"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WPFDemo"

        mc:Ignorable="d"

        Title="GroupBoxDemo" Height="300" Width="300">

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition />

            <RowDefinition />

        </Grid.RowDefinitions>

        <GroupBox Header="GroupBox組合框" Grid.Row="0" Margin="20">

            <StackPanel>

                <CheckBox Margin="10">選項1</CheckBox>

                <CheckBox Margin="10">選項2</CheckBox>

                <CheckBox Margin="10">選項3</CheckBox>

            </StackPanel>

        </GroupBox>

        <GroupBox Header="GroupBox組合框2" Grid.Row="1" Margin="20">

            <StackPanel>

                <RadioButton Margin="10">選項1</RadioButton>

                <RadioButton Margin="10">選項2</RadioButton>

                <RadioButton Margin="10">選項3</RadioButton>

            </StackPanel>

        </GroupBox>

    </Grid>

</Window>

TabItem標籤頁控件

<Window x:Class="WPFDemo.TabItemDemo"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WPFDemo"

        mc:Ignorable="d"

        Title="TabItemDemo" Height="300" Width="300">

    <Grid>

        <TabControl>

            <TabItem Header="選項卡1">

                <StackPanel>

                    <CheckBox  Margin="5">選項1</CheckBox>

                    <CheckBox  Margin="5">選項2</CheckBox>

                    <CheckBox  Margin="5">選項3</CheckBox>

                </StackPanel>

            </TabItem>

            <TabItem Header="選項卡2" IsSelected="True">

                <Grid>

                    <Grid.RowDefinitions>

                        <RowDefinition/>

                        <RowDefinition/>

                    </Grid.RowDefinitions>

                    <GroupBox Header="GroupBox1" Margin="10" Grid.Row="0">

                        <StackPanel>

                            <CheckBox Margin="5">選項1</CheckBox>

                            <CheckBox Margin="5">選項2</CheckBox>

                            <CheckBox Margin="5">選項3</CheckBox>

                        </StackPanel>

                    </GroupBox>

                    <GroupBox Header="GroupBox2" Margin="10" Grid.Row="1">

                        <StackPanel>

                            <RadioButton Margin="5">選項1</RadioButton>

                            <RadioButton Margin="5">選項2</RadioButton>

                            <RadioButton Margin="5">選項3</RadioButton>

                        </StackPanel>

                    </GroupBox>

                </Grid>

            </TabItem>

            <TabItem Header="選項卡3">

                <StackPanel>

                    <RadioButton  Margin="5">選項1</RadioButton>

                    <RadioButton  Margin="5">選項2</RadioButton>

                    <RadioButton  Margin="5">選項3</RadioButton>

                </StackPanel>

            </TabItem>

        </TabControl>

    </Grid>

</Window>

 

Expander可摺疊控件

 屬性:

IsExpanded:獲取和設置Expander控件的摺疊狀態。

ExpandDirection:獲取或設置Expander控件內容展開的方向。枚舉值:包含Up、Down、Left、Right,分別爲上下左右。

事件:

Collapsed:當Expander摺疊時,在內容實際被收起前觸發該事件。

Expanded:當Expander展開時,在內容實際被顯示前觸發該事件。

<Window x:Class="WPFDemo.ExpanderDemo"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WPFDemo"

        mc:Ignorable="d"

        Title="ExpanderDemo" Height="300" Width="300">

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="Auto"/>

            <RowDefinition Height="Auto"/>

            <RowDefinition Height="Auto"/>

            <RowDefinition Height="Auto"/>

        </Grid.RowDefinitions>

        <Expander Header="摺疊菜單1" Grid.Row="0" Background="AliceBlue"   >

            <StackPanel>

                <CheckBox Margin="5">選項1</CheckBox>

                <CheckBox Margin="5">選項2</CheckBox>

                <CheckBox Margin="5">選項3</CheckBox>

            </StackPanel>

        </Expander>

        <Expander Header="摺疊菜單2" Grid.Row="1"  Background="Aqua" IsExpanded="True">

            <StackPanel>

                <CheckBox Margin="5">選項1</CheckBox>

                <CheckBox Margin="5">選項2</CheckBox>

                <CheckBox Margin="5">選項3</CheckBox>

            </StackPanel>

        </Expander>

        <Expander Header="展開我時我才加載內容,摺疊回去我清空內容" Grid.Row="2" Background="Beige"  Collapsed="Expander_Collapsed" Expanded="Expander_Expanded">

            <ScrollViewer MaxHeight="120" HorizontalScrollBarVisibility="Disabled">

                <TextBlock Name="txtText"></TextBlock>

            </ScrollViewer>

        </Expander>

        <Expander Grid.Row="3" Background="Beige" >

            <Expander.Header>

                <StackPanel>

                    <TextBlock>我是自定義摺疊菜單Header</TextBlock>

                    <Button>在Header中添加按鈕</Button>

                </StackPanel>

            </Expander.Header>

            <StackPanel>

                <CheckBox Margin="5">選項1</CheckBox>

                <CheckBox Margin="5">選項2</CheckBox>

                <CheckBox Margin="5">選項3</CheckBox>

            </StackPanel>

        </Expander>

    </Grid>

</Window>

相關文章
相關標籤/搜索