探索WPF控件内容模型的四大支柱

WPF 内容模型

WPF控件内容模型主要指派生于System.Windows.Controls.Control类的各种控件,有四个可包含任意内容的类。 下表列出了继承自 Control 的类。

  • ContentControl:用于包含一段任意类型的内容。但是只能包含一个子元素作为其“内容”。它可以包含任何类型的公共语言运行时对象(例如 string 串或 DateTime 对象)或 UIElement 对象(如 Rectangle 或 Panel)。
  • HeaderedContentControl:提供了一个带标题的单一内容控件的基实现。控件包含一个 Header 和一个 Content 属性。Header 属性用于设置控件的标题,而 Content 属性用于设置控件的内容。
  • ItemsControl:用于呈现集合数据的一种控件。它提供了将集合数据以自定义方式呈现的功能,常用于列表、网格等数据展示。
  • HeaderedItemsControl:用于呈现带标题的集合数据的强大工具,通过自定义布局和样式,可以灵活地展示具有标题的集合数据。
    探索WPF控件内容模型的四大支柱_第1张图片

ContentControl 内容控件

  • 只能包含一个子元素作为其“内容”这使得它非常适合用于展示单个内容元素。它的内容属性为 Content。在WPF控件中有许多继承ContentControl类的控件使用它的内容模型,比如:Button、ButtonBase、CheckBox、ComboBoxItem、ContentControl、Frame、GridViewColumnHeader、GroupItem、Label、ListBoxItem、ListViewItem、NavigationWindow、RadioButton、RepeatButton、ScrollViewer、StatusBarItem、ToggleButton、ToolTip、UserControl、Window
  • 在 Content 中只能放置一个控件(但是可以放置一个容器,然后再在容器中放置多个控件)。严谨来写,Content 的内容应该放置于<控件名.Content>内部,但也可以省略此标记。
  • 下面写个例子
// 以Button为例子

    
        
    
    
        
        
        
    
    
    

    
    
    
    

探索WPF控件内容模型的四大支柱_第2张图片

HeaderedContentControl 标头内容控件

  • HeaderedContentControl 类继承 ContentControl 类,表示带有 Header 的 ContentCo
    ntrol,其除了具有 ContentControl 的 Content 属性外,还具有一个 Header 属性,Hea
    der 的类型也是 Object 对象,与 Content 属性的用法类似。
  • 控件继承HeaderedContentControl 的有:Expander、GroupBox、TabItem。
  • 下面写个例子
 
     
         
     
     
         
         
     

     
     
         
             
                 
                     
                     我是一个有标头的tab
                 
             

             
             
                 
                 这里是tab 的内容
                 
                 
             
         
     

     
     
         
             这里是GroupBox 的标头
             
             
         
         
         
         
             这里是GroupBox的内容
         
         
     
 

探索WPF控件内容模型的四大支柱_第3张图片

ItemsControl 集合模型

  • ItemsControl 类继承自 Control,可以包含多个项,例如字符串、对象或其他元素。 它的内容属性为 ItemsSource 和 Items。 ItemsSource 通常用于使用数据集合填充 ItemsControl。 如果不想使用集合填充 ItemsControl,可使用 Items 属性添加项。
  • 控件继承 ItemsControl 的有:Menu、MenuBase、ContextMenu、ComboBox、ItemsControl、ListBox、ListView、TabControl、TreeView、Selector、StatusBar
  • 下面写个例子ListBox 使用ItemsSource 和 Items 填充数据集
// ListBox 使用ItemsSource填充数据集

    
    


// ItemsSource  绑定
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Markup;
using System.Windows.Media;

namespace WpfControlApp
{
    /// 
    /// ItemsControl.xaml 的交互逻辑
    /// 
    public partial class ItemsControl : Window
    {
        public ItemsControl()
        {
            InitializeComponent();
            // 设置绑定的数据源
            Binding binding = new Binding();

            //绑定源
            binding.Source = TextBlockItems;


            //设置绑定
            listBoxs.SetBinding(ListBox.ItemsSourceProperty, binding);
        }


        /// 
        /// Source对象集合
        /// 
        private List TextBlockItems
        {
            get
            {
                List result = new List();

                // 遍历系统的所有字体
                foreach (FontFamily family in Fonts.SystemFontFamilies)
                {
                    foreach (KeyValuePair pair in family.FamilyNames)
                    {
                        TextBlock t = new TextBlock();
                        // 设置字体名称
                        t.Text = pair.Value;

                        // 设置字体样式
                        t.FontFamily = family;
                        t.FontSize = 12;

                        result.Add(t);
                    }
                }

                // 返回一个 TextBlock 的控件对象集合
                return result;

            }

        }
    }
}

探索WPF控件内容模型的四大支柱_第4张图片

//  ListBox 使用Items 填充数据集

    
        
    
    
        
        
        
    
    
    
    
        
            
                我是ListBoxItem第1行
            
            
                我是ListBoxItem第2行
            
            
                我是ListBoxItem第3行
            
            
                我是ListBoxItem第4行
            
        
    

    
    
        
            我是省略ListBox.Items第1行
            
            
            我是省略ListBox.Items第2行
            
            
            我是省略ListBox.Items第3行
            
        
            我是省略ListBox.Items第4行
        
    
    

    
        
            我是省略ListBoxItem第1行
            我是省略ListBoxItem第2行
            我是省略ListBoxItem第3行
            我是省略ListBoxItem第4行
        
    



探索WPF控件内容模型的四大支柱_第5张图片

HeaderedItemsControl 有标头集合模型

  • HeaderedItemsControl 类继承自 ItemsControl,可以包含多个项,例如字符串、对象或其他元素,也可以包含标题。 它继承 ItemsControl 内容属性 ItemsSource 和 Items,并定义可以是任意对象的 Header 属性。
  • 控件继承自HeaderedItemsControl 并使用其内容模型:MenuItem、ToolBar、TreeViewItem
  • HeaderedItemsControl 模型可以理解为:一个 HeaderedItemsControl 包含一个 Items 集合,每一个 Item 包一个 Header 属性和一个子 Items 集合
  • 下面写个例子TreeView 和 TreeViewItem
 
    
   
     
         
             
                 
                     
                 
                 
                     
                     
                         
                             
                         
                         
                             
                             
                             
                         
                     
                 
             
             
                 
                     
                 
                 
                     
                         
                             
                         
                         
                             
                             
                             
                         
                     
                     
                         
                             
                         
                         
                             
                             
                             
                         
                     
                 
             
         
     
 

探索WPF控件内容模型的四大支柱_第6张图片

公众号“点滴分享技术猿


关注

你可能感兴趣的:(wpf)