• 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的四个控件模型

  • 相关阅读:
    关于【缓存穿透、缓存击穿、缓存雪崩、热点数据失效】问题的解决方案
    pycharm快捷键
    php 整理的零碎知识点
    phpadmin 导出csv格式的数据处理
    python 单例模式的实现
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
  • 原文地址:https://www.cnblogs.com/shuang121/p/2801038.html
Copyright © 2020-2023  润新知