WPF控件内容模型

     WPF控件内容模型主要指派生于System.Windows.Controls.Control类的各种控件,其主要分为四部分:

     ContentControl

    HeaderedContendControl

     ItemsControl

     HeaderedItemsControl

一、ContentControl

     ContentControl模型的类型具有一个 Content 属性。Content 属性的类型为 Object,因此,对于您在 ContentControl 中可以放置的内容没有任何限制。可以使用可扩展应用程序标记语言 (XAML) 或代码来设置 Content。 以下控件使用 ContentControl 内容模型: Button、ButtonBase、CheckBox、ComboBoxItem、ContentControl、Frame、GridViewColumnHeader、GroupItem、Label、ListBoxItem、ListViewItem、NavigationWindow、RadioButton、RepeatButton、ScrollViewer、StatusBarItem、ToggleButton、ToolTip、UserControl、Window

 简单的说就是主要有Content属性的都具有这个模型,简单看个例子

   <!--只能放置一个控件-->
        <Button  Height="23" HorizontalAlignment="Left" Margin="12,45,0,0" Name="button1" VerticalAlignment="Top" Width="75">
            <Button.Content>
                <Image Source="Images/main1.jpg" Width="50"></Image>
            </Button.Content>
        </Button>

这样我们就可以把一个Image控件放到Button中了
像上面的情况,我们只能放置一个控件到Content中,如果想放置多个,我们需要加一个panel容易才可以

 <!--加一个容器就可以放置多个控件了-->
        <Button  Height="34" HorizontalAlignment="Left" Margin="10,98,0,0" Name="button2" VerticalAlignment="Top" Width="107">
            <Button.Content>
                <StackPanel  Orientation="Horizontal" Width="104">
                    <TextBlock Text="名字" HorizontalAlignment="Center"  ></TextBlock>
                    <Image Source="Images/main1.jpg" Width="50"></Image>
                </StackPanel>
            </Button.Content>
            </Button>

这样就可以了

我们也可以通过代码添加Content

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            TextBlock tblock = new TextBlock();
            tblock.Text = "代码";
          
            TextBlock time = new TextBlock();
            time.Text = DateTime.Now.ToString("hh:mm:ss");

            StackPanel panel = new StackPanel();
            panel.Children.Add(time);
            panel.Children.Add(tblock);

            button4.Content = panel;
        }

二、、HeaderedContentControl模型

HeaderedContentControl类继承ContentControl类,表示带有Header的ContentControl,其除了具有ContentControl的Content属性外,还具有一个Header属性,Header的类型也是Object对象,与Content属性的用法类似。 从 HeaderedContentControl 继承的控件有:Expander、GroupBox、TabItem。

同样具有header和content的都具有这个模型

看一个例子:

     <GroupBox  Height="118" HorizontalAlignment="Left" Margin="10,10,0,0" Name="groupBox1" VerticalAlignment="Top" Width="215">
            <GroupBox.Header> 
                <TextBlock Text="头部"></TextBlock>
            </GroupBox.Header>
            <GroupBox.Content>
                <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
                    <Image Source="Images/main1.jpg" Width="48" Height="48" />
                    <TextBlock Text="DVD" HorizontalAlignment="Center" />
                </StackPanel>
            </GroupBox.Content>
        </GroupBox>

同样也可以使用代码添加

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            GroupBox groupBox = new GroupBox();
            groupBox.Header = "头部";
            TextBlock tblock = new TextBlock();
            tblock.Text = "代码";

            TextBlock time = new TextBlock();
            time.Text = DateTime.Now.ToString("hh:mm:ss");

            StackPanel panel = new StackPanel();
            panel.Children.Add(time);
            panel.Children.Add(tblock);
            groupBox.Content=panel
        }

 三、ItemsControl模型

 <ListBox Height="100" HorizontalAlignment="Left" Margin="12,53,0,0" Name="listBox1" VerticalAlignment="Top" Width="120">
            <ListBox.Items>
                <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="10,10,0,0" Name="checkBox2" VerticalAlignment="Top" />
                <TextBlock Text="ComboBox ItemA"></TextBlock>
                <TextBlock Text="ComboBox ItemB"></TextBlock>
                <Image Source="Images/main1.jpg"></Image>
            </ListBox.Items>
        </ListBox>

 

从 ItemsControl 继承的控件包含一个对象集合。可以使用 ItemsSource 属性或 Items 属性来填充一个 ItemsControl。只要具体有Items属性的空间都具有这个模型

1、ItemsSource

使用ItemSource属性,需将其绑定到一个实现IEnumerable接口的类型的实例上,系统会枚举其成员做为ItemsControl的Item

     private void BindListBoxByItemSource()
        {
            IList<TextBlock> txtblocks = new List<TextBlock>();

            TextBlock tb1 = new TextBlock() { Text="文字一" };
            TextBlock tb2 = new TextBlock() { Text = "文字二" };
            TextBlock tb3 = new TextBlock() { Text = "文字三" };
            TextBlock tb4 = new TextBlock() { Text = "文字四" };
            txtblocks.Add(tb1);
            txtblocks.Add(tb2);
            txtblocks.Add(tb3);
            txtblocks.Add(tb4);

            listBox2.ItemsSource = txtblocks;
        }

 

 2、Items

随 WPF 附带的每个 ItemsControl 具有一个对应的类,该类代表 ItemsControl 中的一个项。下表列出了随 WPF 附带的 ItemsControl 对象及其相应的项容器。
ItemsControl项容器
ComboBox       ComboBoxItem
ContextMenu    MenuItem
ListBox            ListBoxItem
ListView           ListViewItem
Menu               MenuItem
StatusBar        StatusBarItem
TabControl       TabItem
TreeView          TreeViewItem

 <ListBox Height="100" HorizontalAlignment="Left" Margin="197,169,0,0" Name="listBox3" VerticalAlignment="Top" Width="120">
          
                <ListBoxItem>
                    ddddd
                    aaaaa
                </ListBoxItem>
                <ListBoxItem>
                    aaaa
                </ListBoxItem>
                <ListBoxItem>
                    ggggg
                </ListBoxItem>
        </ListBox>

一个Items下面有很多的Item
本来应该这样写

      <ListBox Height="100" HorizontalAlignment="Left" Margin="197,169,0,0" Name="listBox3" VerticalAlignment="Top" Width="120">
            <ListBox.Items>
                <ListBoxItem>
                    ddddd
                    aaaaa
                </ListBoxItem>
                <ListBoxItem>
                    aaaa
                </ListBoxItem>
                <ListBoxItem>
                    ggggg
                </ListBoxItem>
            </ListBox.Items>
        </ListBox>

在这里也可以省略ListBox.Items,写成上面的形式
同样我们也可以通过代码添加进去

   private void bindCombobox()
        {
            ComboBoxItem item = new ComboBoxItem();
            item.Content = "ddfdfdfdf";
            ComboBoxItem item1 = new ComboBoxItem();
            item1.Content = "aaaaaaa";
            ComboBoxItem item2 = new ComboBoxItem();
            item2.Content = "bbbbbbb";
            ComboBoxItem item3 = new ComboBoxItem();
            item3.Content = "ccccccc";
            comboBox2.Items.Add(item);
           
        }

四、HeaderedItemsControl模型
HeaderedItemsControl 从 ItemsControl 类继承。HeaderedItemsControl 定义 Header 属性,该属性遵从相同的规则,因为 HeaderedContentControl. WPF 的 Header 属性附带三个从 HeaderedItemsControl 继承的控件:MenuItem、ToolBar、TreeViewItem HeaderedItemsControl模型可以理解为如下结构:一个HeaderedItemsControl包含一个Items集合,每一个Item包含一个Header属性,一个子Items集合,以TreeView和TreeViewItem为例:

 <Grid>
        <TreeView  Height="233"  HorizontalAlignment="Left" Margin="420,12,0,0" Name="treeView1" VerticalAlignment="Top" Width="204">
            <TreeViewItem  IsExpanded="True">
                <TreeViewItem.Header>
                    Tree Node A
                </TreeViewItem.Header>
                <TreeViewItem.Items>
                    <TextBlock Text="Node A - 1" />
                    <Button Content="Node A - 2" />
                </TreeViewItem.Items>
            </TreeViewItem>
            <TreeViewItem>
                <TreeViewItem.Header>
                     Tree Node B
                </TreeViewItem.Header>
                <TreeViewItem.Items>
                    <TextBlock Text="Node B - 1" />
                    <Button Content="Node B - 2" />
                </TreeViewItem.Items>
            </TreeViewItem>
        </TreeView>

也可以通过代码完成

   //代码绑定TreeView2
        private void BindTreeView2()
        {
            TreeViewItem item1 = new TreeViewItem() { Header = "节点一" };
            TreeViewItem item11 = new TreeViewItem() { Header = "节点1-1" };
            item11.Items.Add("aaaa");
            item11.Items.Add("bbbb");
            item11.Items.Add("cccc");
            item11.Items.Add("dddd");


            item1.Items.Add(item11);
            item1.Items.Add("cccc");
            item1.Items.Add("dddd");

            TreeViewItem item2 = new TreeViewItem() { Header = "节点二" };
            item2.Items.Add("aaaa");
            item2.Items.Add("bbbb");
            item2.Items.Add("cccc");
            item2.Items.Add("dddd");
            treeView2.Items.Add(item1);
            treeView2.Items.Add(item2);
        }

        private void treeView2_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            string dd = treeView2.SelectedItem as string;
            MessageBox.Show(dd);
        }

上面就是wpf的四个控件模型

 

 

posted @ 2012-12-04 11:22  双魂人生  阅读(1808)  评论(0编辑  收藏  举报