添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
逼格高的板栗  ·  Azul Zulu Java ...·  4 天前    · 
低调的海豚  ·  牧野区人民政府·  1 月前    · 
严肃的打火机  ·  How to Use the Deque ...·  4 月前    · 
豪爽的大海  ·  SpringBoot ...·  5 月前    · 
  1. WPF常用绑定
  2. 绑定方式
  3. Control 类

注:绑定源的属性需继承 INotifyPropertyChanged 接口才可更新绑定目标属性。

控件默认Mode:如果是可编辑的那么相应的属性值是TwoWay方向,如果是不可编辑的一般来讲是OneWay。

1. 直接绑定到DataContext的属性
Text="{Binding Position}"
等价于 Text="{Binding Path=Position}"
2. UpdateSourceTrigger 目标影响源的触发方式
Text="{Binding Position, UpdateSourceTrigger=PropertyChanged}"
 a. LostFocus: 当控件失去焦点时改变源属性值;(Text属性默认)
 b. PropertyChanged: 每当控件的属性值改变都立即改变源属性值;(大部分默认)
 c. Explicit: 用户自己通过调用UpdateSource方法来改变源属性的值,控制权在用户手上。

改变数据源

Source 绑定资源

<Window.Resources>
    <TextBox x:Key="Text2" Margin="5" Text="Text" />
    <Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
        <Setter Property="FontSize" Value="16" />
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>
</Window.Resources>
<StackPanel>
    <TextBox Style="{StaticResource TextBoxStyle}" 
             Text="{Binding Source={StaticResource Text2}, Path=Text}" />
</StackPanel>

ElementName

设置ElementName,指定“数据源”为界面上某个控件的某个属性(同一Xaml)

<TextBox Name="TextBox1" Width="200" Text="Test" />
<TextBlock Width="200" Text="{Binding ElementName=TextBox1, Path=Text}" />
<TextBlock Width="200" Text="{Binding ElementName=TextBox1, Path=Text[2]}"/>
<TextBlock Width="200" Text="{Binding ElementName=TextBox1, Path=Text.Length}"/> 子属性

RelativeSource

在不确定绑定的Source时,但知道与绑定对象两者相对关系时就需要使用RelativeSource

WPF绑定与RelativeSource结合使用 – 知乎 (zhihu.com)

  • Self: UI元素的一个属性绑定在自身的另一个属性上
    <Rectangle Height="100"
               Width="{Binding RelativeSource={RelativeSource Self}, Path=Height}"/>
    <Rectangle Name="rectangle"
               Height="100"
               Width="{Binding ElementName=rectangle, Path=Height}"/>
    
  • AncestorType: UI元素的一个属性绑定在某个父元素的属性上

    AncestorLevel:表示使用AncestorType指定的类型的第几次匹配;

    <Label Background = "{Binding Path=Background, RelativeSource={RelativeSource AncestorType={x:Type Grid}}}"/> </Grid>
  • TemplatedParent: ControlTemplate 属性绑定到应用 ControlTemplate 的控件的属性
    <Window.Resources>
        <ControlTemplate x:Key="template">
             <Canvas>
                 <Ellipse Width="150" Height="100" Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" />
                 <TextBlock Margin="35" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" />
             </Canvas>
        </ControlTemplate>
    </Window.Resources>
     <Canvas>
         <Button Background="Black" Content="button" Template="{StaticResource template}" />
     </Canvas>
    

    效果相同:

    <StackPanel DataContext="abc">
        <Label Content="{Binding}"></Label>
        <Label Content="{Binding RelativeSource={RelativeSource Self},Path=DataContext}"></Label>
    </StackPanel>
    

    {Binding } 不设定明确的绑定的Source,这样Binding就去从本控件类为开始根据可视树的层次结构自下而上查找不为空的Datacontext属性的值。
    RelativeSource self的含义为绑定的Source为控件自身,这样Binding就绑定了自身控件的Datacontext。

    Converter 转换器

    用于源数据和目标数据的特定转换。

    WPF使用转换器(Converter) – 翻白眼的哈士奇 – 博客园 (cnblogs.com)

    通过实现IValueConverter接口的Convert方法,将源数据转换为目标数据;若转换模式为TwoWay,则通过实现IValueConverter接口的ConvertBack方法,将目标数据转换为源数据,若转换模式为OneWay,则该方法可不做实现,直接返回null;

    转换器多传值

    如何:根据绑定项列表生成值 - WPF .NET Framework | Microsoft Learn

    触发器:TriggerBase 类

    触发器通过Style.Triggers集合链接到样式。每个样式都可以有任意多个触发器,而且每个触发器都是System.Windows.TriggerBase的派生类的实例。

    有多种不同类型的触发器: Trigger(WPF定义的用户操作)、 MultiTrigger(多触发器)、 EventTrigger(事件触发器)、 DataTrigger(数据触发器)和 MultiDataTrigger(多数据触发器)。

    主要运用的场景在StyleControlTemplateDataTemplate

    <Style x:Key="BigFontButton">
        <Style.Setters>
            <Setter Property="Control.FontFamily" Value="Times New Roman" />
            <Setter Property="Control.FontSize" Value="18" />
        </Style.Setters>
        <Style.Triggers>
            <Trigger Property="Control.IsFocused" Value="True">
                <Setter Property="Control.Background" Value="DarkRed" />
            </Trigger>
        </Style.Triggers>
    </Style>
    

    只要停止应用触发器,元素就会恢复到正常外观。

    在该例中,这意味着只要用户使用Tab键让按钮失去焦点,按钮就会恢复为通常的灰色背景。

    MultiTrigger (多条件触发器)

    提供了一个Conditions集合,可通过该集合定义一系列属性和值得组合。

    以下示例包含两个 MultiTrigger。 当 HasItems 属性为 false 且 Width 属性为 Auto 时,第一个设置 MinWidth 属性值。第二个属性是相似的,但适用于 MinHeight 属性。

    <Style.Triggers>
      <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Background" Value="#EEEEEE" />
      </Trigger>
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="HasItems" Value="false" />
          <Condition Property="Width" Value="Auto" />
        </MultiTrigger.Conditions>
        <Setter Property="MinWidth" Value="120"/>
      </MultiTrigger>
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="HasItems" Value="false" />
          <Condition Property="Height" Value="Auto" />
        </MultiTrigger.Conditions>
        <Setter Property="MinHeight" Value="95"/>
      </MultiTrigger>
    </Style.Triggers>
    

    MultiTrigger 使你能够基于 Condition集合设置属性值或启动操作。 当元素的类Property的属性与指定的Value属性指定的属性Condition 的值匹配时,将满足条件。 该比较是一项引用相等性检查。 然后,可以使用 Setter 或 EnterActions 属性 ExitActions 在满足所有条件时应用更改或启动操作。

    对象的 Setters 属性 MultiTrigger 只能包含 Setter 对象。 向 Setter 对象添加子级 MultiTrigger 会隐式将其添加到 SetterBaseCollection 对象中 MultiTriggerEventSetter 不支持对象;仅 Style.Setters 支持 EventSetter 对象。

    EventTrigger (事件触发器,一般用于动画)

    普通触发器等待属性发生变化,而事件触发器等待特定的事件被引发

    EventTriggers仅支持Actions(不能用Setter),一般用于动画。

    下面的示例包含两 EventTrigger 个对象,其中一个对象是鼠标进入元素时发生的,在1.5秒内使矩形变长至300;另一个对象是鼠标离开元素时发生的,在1.5秒内使矩形变短至原始尺寸。

    <Style TargetType="Rectangle">
      <Setter Property="Width" Value="50" />
      <Setter Property="Height" Value="50" />
      <Setter Property="Margin" Value="20" />
      <Setter Property="HorizontalAlignment" Value="Left" />
      <Style.Triggers>
        <!--鼠标进入元素-->
        <EventTrigger RoutedEvent="MouseEnter">
            <BeginStoryboard>
                <!--可使用TargetProperty和TargetName属性指向某个特定属性和特定元素-->
                <Storyboard>
                  <DoubleAnimation To="300" Duration="0:0:1.5" 
                    AccelerationRatio="0.10" DecelerationRatio="0.25" 
                    Storyboard.TargetProperty="(Canvas.Width)" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <!--鼠标离开元素-->
        <EventTrigger RoutedEvent="MouseLeave">
            <BeginStoryboard>
                <Storyboard>
                  <DoubleAnimation Duration="0:0:1.5" 
                    AccelerationRatio="0.10" DecelerationRatio="0.25" 
                    Storyboard.TargetProperty="(Canvas.Width)" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
      </Style.Triggers>
    </Style>
    

    在XAML中,必须在故事般中定义每个动画,故事板为动画提供了事件线。用户可以在故事板事件内部定义希望使用的一个或多个动画对象。每个动画对象执行本质上相同的任务:在一定时期内修改依赖项属性。

    【WPF学习】第五十章 故事板 – Peter.Luo – 博客园 (cnblogs.com)

    DataTrigger (数据触发器)

    DataTrigger 类 (System.Windows) | Microsoft Learn

    StyleControlTemplate并且 DataTemplate 都具有触发器集合。 A DataTrigger 允许在数据对象的属性值与指定的 Value属性值匹配时设置属性值。 例如,如果要显示对象列表 Employee ,则可能希望前景颜色根据每个 Employee's 当前出席情况而有所不同。 (例如, Employees 当前休假的人员显示为紫色的前景。) 在某些情况下,创建转换器或使用转换器 DataTemplateSelector可能更合适。 有关详细信息,请参阅 数据模板化概述

    请注意,必须为数据触发器指定 Binding 属性和 Value 属性 DataTrigger 才能有意义。 如果未指定一个或两个属性,则会引发异常。

    对象的 Setters 属性 DataTrigger 只能包含 Setter 对象。 向 Setter 对象添加子级 DataTrigger 会隐式将其添加到 SetterBaseCollection 对象中 DataTriggerEventSetter 不支持对象;仅 Style.Setters 支持 EventSetter 对象。

    在以下示例中ItemsSource,位置ListBox对象绑定到 Places 对象ObservableCollection放置 对象具有属性Name和State。

    每个对象都显示 一个 Place 对象。ListBox 在本 Style 示例中应用于每个 ListBoxItem示例。

    指定的DataTrigger是:

  • 如果 State 为 “WA” ,则相应的ListBoxItem的Foreground将设置为“Red”。

    如果Name为”Portland” 并且State为”OR”,则相应的Background将设置为”Cyan”。

    <Window.Resources>
      <c:Places x:Key="PlacesData"/>
      <Style TargetType="ListBoxItem">
        <Style.Triggers>
          <DataTrigger Binding="{Binding Path=State}" Value="WA">
            <Setter Property="Foreground" Value="Red" />
          </DataTrigger>    
          <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
              <Condition Binding="{Binding Path=Name}" Value="Portland" />
              <Condition Binding="{Binding Path=State}" Value="OR" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Background" Value="Cyan" />
          </MultiDataTrigger>
        </Style.Triggers>
      </Style>
      <DataTemplate DataType="{x:Type c:Place}">
        <Canvas Width="160" Height="20">
          <TextBlock FontSize="12"
                 Width="130" Canvas.Left="0" Text="{Binding Path=Name}"/>
          <TextBlock FontSize="12" Width="30"
                     Canvas.Left="130" Text="{Binding Path=State}"/>
        </Canvas>
      </DataTemplate>
    </Window.Resources>
    <StackPanel>
      <TextBlock FontSize="18" Margin="5" FontWeight="Bold"
        HorizontalAlignment="Center">Data Trigger Sample</TextBlock>
      <ListBox Width="180" HorizontalAlignment="Center" Background="Honeydew"
        ItemsSource="{Binding Source={StaticResource PlacesData}}"/>
    </StackPanel>
    

    (不用)命令(Command)绑定到事件(Event)

    下载并引用Microsoft.Xaml.Behaviors.Wpf

    xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
    
    <ComboBox ItemsSource="{Binding Gasolines}" SelectedIndex="{Binding CurrentIndex}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Type}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
        <!--Behaviorsd的事件触发器使用-->
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding DisplayPriceCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </ComboBox>
    

    Control 类

    控件库 - WPF .NET Framework | Microsoft Docs

    所有控件继承的类,控件通用可绑定属性。(常用)

    BorderBrush 获取或设置一个用于描述控件的边框背景的画笔。 IsInitialized 获取一个值,该值指示此元素是在 XAML 处理器处理期间还是显式调用其 EndInit() 方法进行初始化。(继承自 FrameworkElement) IsLoaded 获取一个值,该值指示是否已加载此元素以供呈现。(继承自 FrameworkElement) IsVisible 获取一个值,该值指示此元素在用户界面中是否可见 (UI) 。 这是依赖项属性。(继承自 UIElement) Margin 获取或设置元素的外边距。(继承自 FrameworkElement) MaxHeight 获取或设置元素的最大高度约束。(继承自 FrameworkElement) MaxWidth 获取或设置元素的最大宽度约束。(继承自 FrameworkElement) MinHeight 获取或设置元素的最小高度约束。(继承自 FrameworkElement) MinWidth 获取或设置元素的最小宽度约束。(继承自 FrameworkElement) 获取或设置元素的标识名称。 该名称提供引用,以便代码隐藏(如事件处理程序代码)可以在 XAML 处理器处理期间构造标记元素后引用它。(继承自 FrameworkElement) Opacity 获取或设置在用户界面中呈现 (UI) 时应用于整个 UIElement 的不透明度因子。 这是依赖项属性。(继承自 UIElement) Padding 获取或设置控件内部的填充边距。 Parent 获取此元素的逻辑父元素。(继承自 FrameworkElement) Resources 获取或设置本地定义的资源字典。(继承自 FrameworkElement) Style 获取或设置此元素呈现时所使用的样式。(继承自 FrameworkElement) 获取或设置任意对象值,该值可用于存储关于此元素的自定义信息。(继承自 FrameworkElement) Template 获取或设置控件模板。 ToolTip 获取或设置用户界面中为此元素显示的工具提示对象 (UI) 。(继承自 FrameworkElement) Triggers 获取直接在此元素上或在子元素中建立的触发器的集合。(继承自 FrameworkElement) VerticalAlignment 获取或设置在父元素(如面板或项控件)中组合此元素时所应用的垂直对齐特征。(继承自 FrameworkElement) VerticalContentAlignment 获取或设置控件内容的垂直对齐方式。 Visibility 获取或设置此元素的用户界面 (UI) 可见性。 这是依赖项属性。(继承自 UIElement) Width 获取或设置元素的宽度。(继承自 FrameworkElement)

    Button

    Button 类 (System.Windows.Controls) | Microsoft Docs

    Command 获取或设置在按下按钮时调用的命令。(继承自 ButtonBase)

    1.可以定义一个控件模板(通过Template属性)

    2.可以显示出string以外的其他信息(通过Content属性)

    3.为Label内容添加一个DataItemplate(通过ContentTemplate属性)

    4.做一些FrameworkElement元素不能做的事情

    当Label不可用的时候它的Text显示为灰色,但是TextBlock不会

    加载Label时比TextBlock需要耗费更多的时间

    TextBox 文本输入框

    TextBox 类 (System.Windows.Controls) | Microsoft Docs

    继承:FrameworkElement → Control → TextBoxBase → TextBox

    <TextBox Text="{Binding UserName}" />
    

    ComboBox 下拉列表

    ComboBox 类 (System.Windows.Controls) | Microsoft Docs

    <ComboBox>
        <ComboBoxItem>ComboBox Item #1</ComboBoxItem>
        <ComboBoxItem IsSelected="True">ComboBox Item #2</ComboBoxItem>
        <ComboBoxItem>ComboBox Item #3</ComboBoxItem>
    </ComboBox>
    
  • 绑定枚举:
  • <ComboBox
        ItemsSource="{Binding Path=SampleTypeItems}"
        DisplayMemberPath="Value"
        SelectedIndex="0"
        SelectedValue="{Binding QCRegister.QC_SampleType}"
        SelectedValuePath="Key"/>
    
    // ItemsSource为字典,通过GetEnumDic方法获取枚举类的Dic<枚举项Key,描述Value>
    public Dictionary<string, string> SampleTypeItems => EnumHelper.GetEnumDic(typeof(SampleType));
    /// <summary>
    /// 返回 Dic<枚举项,描述>
    /// </summary>
    /// <param name="enumType"></param>
    /// <returns>Dic<枚举项,描述></returns>
    public static Dictionary<string, string> GetEnumDic(Type enumType)
        Dictionary<string, string> dic = new Dictionary<string, string>();
        FieldInfo[] fieldinfos = enumType.GetFields();
        foreach (FieldInfo field in fieldinfos)
            if (field.FieldType.IsEnum)
                Object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
                dic.Add(field.Name, ((DescriptionAttribute)objs[0]).Description);
        return dic;
        /// <summary>
        /// 样本类型
        /// </summary>
        public enum SampleType
            [Description("血清")]
            Serum = 1,
            [Description("血浆")]
            Plasma = 2,
            [Description("全血")]
            WholeBlood = 3,
            [Description("尿液")]
            Urine = 4,
    
  • ItemsSource绑定列表(List):
  • <ComboBox
        DisplayMemberPath="Cal_Batch_No"
        ItemsSource="{Binding CalItems}"
        SelectedItem="{Binding SelectedCal}" />
    

    ItemsControl

    ItemsSource:绑定的列表

    ItemsControl.Template:设置ControlTemplate定义ItemsControl的外观。

    ItemsControl.ItemsPanel:每个项的Panel(布局方式)

    ItemsControl.ItemTemplate:每个项的 DataTemplate(数据对象的可视化)

    ItemsControl.ItemContainerStyle:每项的Style

    <ItemsControl ItemsSource="{Binding MyTodoList}}">
      <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
          <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">
            <ItemsPresenter/>
          </Border>
        </ControlTemplate>
      </ItemsControl.Template>
      <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
          <WrapPanel />
        </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <DataTemplate.Resources>
            <Style TargetType="TextBlock">
              <Setter Property="FontSize" Value="18"/>
              <Setter Property="HorizontalAlignment" Value="Center"/>
            </Style>
          </DataTemplate.Resources>
            <Ellipse Fill="Silver"/>
            <StackPanel>
              <TextBlock Margin="3,3,3,0"
                         Text="{Binding Path=Priority}"/>
              <TextBlock Margin="3,0,3,7"
                         Text="{Binding Path=TaskName}"/>
            </StackPanel>
          </Grid>
        </DataTemplate>
      </ItemsControl.ItemTemplate>>
      <ItemsControl.ItemContainerStyle>
        <Style>
          <Setter Property="Control.Width" Value="100"/>
          <Setter Property="Control.Margin" Value="5"/>
          <Style.Triggers>
            <Trigger Property="Control.IsMouseOver" Value="True">
              <Setter Property="Control.ToolTip"
                      Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                              Path=Content.Description}"/>
            </Trigger>
          </Style.Triggers>
        </Style>
      </ItemsControl.ItemContainerStyle>
    </ItemsControl>
    

    ListBox

    继承:ItemsControlSelector → ListBox

    和ItemsControl:

    ItemsSource:绑定的列表

    ListBox.Template:设置ControlTemplate定义ItemsControl的外观。

    ListBox.ItemsPanel:每个项的Panel(布局方式)

    ListBox.ItemTemplate:每个项的 DataTemplate(数据对象的可视化)

    ListBox.ItemContainerStyle:每项的Style

    SelectionMode :用户可以一次选择的项数。

    DataGrid

    DataGrid – WPF .NET Framework | Microsoft Docs

    FrameworkElement → Control → ItemsControl → Selector → MultiSelector → DataGrid

    <DataGrid
        AutoGenerateColumns="False"
        CanUserAddRows="False"
        FontSize="20"
        HeadersVisibility="All"
        IsReadOnly="True"
        ItemsSource="{Binding SampleService.SampleTestCurrentList}"
        SelectedItem="{Binding SelectedSampleTest}"
        Visibility="{Binding Path=IsChecked, ElementName=DefaultShow, Converter={StaticResource BoolToVisibilityConverter}}">
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Tes_State}" Value="9">
                        <!--<Setter Property="Background" Value="#E77E6E" />-->
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Columns>
            <DataGridTextColumn Width="1*" Binding="{Binding Tes_State, Converter={StaticResource DescriptionConverter}}" Header="状态" />
            <DataGridTextColumn Width="1*" Binding="{Binding Tes_Sample_Number}" Header="编号" />
            <DataGridTextColumn Width="0.6*" Binding="{Binding Tes_Sample_Position}" Header="位置" />
            <DataGridTemplateColumn Width="1*" Header="项目">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Tes_Project_Name}" TextWrapping="Wrap" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Width="1.2*" Binding="{Binding Tes_Reagent_Batch_No}" Header="试剂批号" />
            <DataGridTemplateColumn Width="1.2*" Header="进度">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ProgressBar Height="20" md:TransitionAssist.DisableTransitions="True" Value="{Binding Tes_Progress}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Width="1.2*" Binding="{Binding Tes_Started_DateTime, StringFormat='{}{0:M/d H:mm}'}" Header="检测时间" />
            <DataGridTextColumn Width="1.2*" Binding="{Binding Tes_Expected_DateTime, StringFormat='{}{0:M/d H:mm}'}" Header="预计完成时间" />
        </DataGrid.Columns>
    </DataGrid>
    IsSynchronizedWithCurrentItem
    获取或设置指示 Selector 是否应当使 SelectedItemItems 属性中的当前项保持同步的值。(继承自 Selector)
    IsTextSearchCaseSensitive
    获取或设置一个值,该值指示搜索项时大小写是否为条件。(继承自 ItemsControl)
    Items
    获取用于生成 ItemsControl 的内容的集合。(继承自 ItemsControl)
    ItemsPanel
    获取或设置模板,该模板定义对项的布局进行控制的面板。(继承自 ItemsControl)
    ItemsSource
    获取或设置用于生成 ItemsControl 的内容的集合。(继承自 ItemsControl)
    ItemTemplate
    获取或设置用来显示每个项的 DataTemplate。(继承自 ItemsControl)
    ItemTemplateSelector
    获取或设置用于选择用来显示每个项的模板的自定义逻辑。(继承自 ItemsControl)
    LogicalChildren
    获取 ItemsControl 对象的逻辑子对象的枚举器。(继承自 ItemsControl)
    MaxColumnWidth
    获取或设置 DataGrid 中列和标题的最大宽度约束。
    MinColumnWidth
    获取或设置 DataGrid 中列和标题的最小宽度约束。
    MinRowHeight
    获取或设置 DataGrid 中行和标题的最小高度约束。
    NewItemMargin
    获取或设置新项行的边距。
    RowBackground
    获取或设置行背景的默认画笔。
    RowDetailsTemplate
    获取或设置用于显示行详细信息的模板。
    RowDetailsTemplateSelector
    获取或设置用于行详细信息的模板选择器。
    RowDetailsVisibilityMode
    获取或设置一个值,该值指示何时显示行的详细信息部分。
    RowHeaderActualWidth
    获取行标题列的呈现宽度。
    RowHeaderStyle
    获取或设置应用于所有行标题的样式。
    RowHeaderTemplate
    获取或设置行标题的模板。
    RowHeaderTemplateSelector
    获取或设置行标题的模板选择器。
    RowHeaderWidth
    获取或设置行标题列的宽度。
    RowHeight
    获取或设置所有行的建议高度。
    RowStyle
    获取或设置应用于所有行的样式。
    RowStyleSelector
    获取或设置行的样式选择器。
    RowValidationErrorTemplate
    获取或设置用来以可视方式指示行验证中的错误的模板。
    RowValidationRules
    获取用于验证每个行中的数据的规则。
    SelectAllCommand
    表示命令,该命令指示在 DataGrid 中选择所有单元格的意图。
    SelectedCells
    获取当前选定单元格的列表。
    SelectedIndex
    获取或设置当前选择中第一项的索引,如果选择为空,则返回负一(-1)。(继承自 Selector)
    SelectedItem
    获取或设置当前选择中的第一项,或者,如果选择为空,则返回 null。(继承自 Selector)
    SelectedItems
    获取在 MultiSelector 中选定的项。(继承自 MultiSelector)
    SelectedValue
    获取或设置通过使用 SelectedItem 而获取的 SelectedValuePath 的值。(继承自 Selector)
    SelectedValuePath
    获取或设置用于从 SelectedValue 获取 SelectedItem 的路径。(继承自 Selector)
    SelectionMode
    获取或设置一个值,该值指示如何在 DataGrid 中选择行和单元格。
    SelectionUnit
    获取或设置一个值,该值指示是否可以在 DataGrid 中选择行、单元格或两者。
    VerticalScrollBarVisibility
    获取或设置一个指示如何在 DataGrid 中显示垂直滚动条的值。
    

    TabControl

    TabControl 元素显示通过选择相应的选项卡访问的离散页面上的内容。每个选项卡都包含一个 TabItem

    <TabControl>
      <TabItem>
        <TabItem.Header>
          <StackPanel Orientation="Horizontal">
            <Ellipse Width="10" Height="10" Fill="DarkGray"/>
            <TextBlock>Tab 1</TextBlock>
          </StackPanel>
        </TabItem.Header>
        <StackPanel>
          <TextBlock>Enter some text</TextBlock>
          <TextBox Name="textBox1" Width="50"/>
        </StackPanel>
      </TabItem>
      <TabItem Header="Tab 2">
        <!--Bind TextBlock.Text to the TextBox on the first
        TabItem.-->
        <TextBlock Text="{Binding ElementName=textBox1, Path=Text}"/>
      </TabItem>
    </TabControl>
    
  •