WPF多条目控件

多条目空见可以用来显示任意多项数据。所有的多条目恐惧都派生自虚类ItemsControl.

       首先,该类定义了Items属性,任何派生自Object类型的实例都可添加到该属性中。Items是一个只读属性,该属性只支持通过添加、删除等操作控制器其包含的元素,而不能通过该属性进行设置。完成指定多条目控件所包含的所有元素这一功能的是ItemSource属性,而该属性的之一用途是对绑定进行支持。在设置了Items属性所包含的各个项目之后,WPF将不再允许后台代码对ItemSource属性进行设置;同样,在后台代码对ItemSource属性进行设置后,Items属性页不再允许被更改。

       HasItems属性标识当前实例的Items属性是否包含任何元素。

       ItemsControl对Items属性中包含的各个数据的显示是通过一个继承了ICollectionView接口的实例来实现的。通常情况下,开发人员可是有CollectionViewSource类的静态函数GetDefaultView来获得所带入的参数的默认显示类。

ICollectionView view=CollectionViewSource.getDefaultView(DataContext);
object item=view.CurrentItem;

 

       为完成各项显示效果,多条目空间还定义了ItemContainerStyle、ItemContainerStyleSelector、、ItemTemplate、ItemTemplateSelector属性。绘制过程如下:

  1. 首先,在WPF生成多条目控件的外观之前,系统向ItemContainerGenerator中记载的实例发出一个生成承载多条目控件所使用的容器的请求。
  2. 如果多条目控件在生成这一容器以前已经设置了ItemTemplate属性,则WPF将该属性记录的模板置入容器的ContentTemplate中;
  3. wPF根据控件的类型决定生成容器的类型,如TreeView控件生成的容器就是TreeViewItem。
  4. 由于各个容器都派生自ContentControl,因此WPF根据前述ContentControl类的外观生成步骤为容器生成最终外观。

       对ItemControl的显示精细控制的还有DisplayMemberPath属性,该属性设置了ItemControl岁各个子项所显示的属性的名称。

<ListBox DisplayMemberPath="Name">
      <Button Name="Button"/>
      <Label Name="Label"/>
    </ListBox>
<!--等价于-->
<Grid.Resources>
      <DataTemplate x:Key="itemTemplate">
        <TextBlock Text="{Binding Path=Name}"/>
      </DataTemplate>
    </Grid.Resources>
    <ListBox ItemTemplate="{StaticResource itemTemplate}">
      <Button Name="Button"/>
      <Label Name="Label"/>
    </ListBox>

 ==================================================================================

选项控件 Selector:

 

ComboBox从Selector派生后有添加了IsDropDownOpen属性,控制组合框的下拉列表的开闭。下拉列表的开闭触发事件DropDownOpened和DropDownClosed。MaxDropDownHeight设置下拉列表的高度;IsSelectionBoxHighlighted被选中选项高亮;IsEditable是否可编辑,true使显示的只能是字符串,复杂元素需要通过设置TextSearch.TextPath的复杂属性设定;isReadOnly false时接受更改,可编辑;StayOpenOnEdit true 下拉列表保持打开,并根据输入结果对选项进行匹配。

<Grid>
       <!--TextSearch.TextPath="Children[0].Name"表示选中某项时,显示其第一个子元素的Name属性-->
       <ComboBox Height="20" Width="100" IsEditable="True" TextSearch.TextPath="Children[0].Name" SelectedIndex="0">
      <!--Item1-->
      <StackPanel Orientation="Horizontal" Margin="1">
        <Image Width="16" Height="16" Source="Images/warning.bmp" Name="image1"/><!--选中后,编辑框显示image1-->
        <TextBlock Height="16" Text="This is item1"/>
      </StackPanel>
      <!--Item2-->
      <StackPanel Orientation="Horizontal" Margin="1">
        <Image Width="16" Height="16" Source="Images/warning.bmp"/><!--选中后,显示为空-->
        <TextBlock Height="16" Text="This is item2"/>
      </StackPanel>
      <!--Item3-->
      <Image Width="16" Height="16" Source="Images/warning.bmp"/><!--选中后,显示为空-->
      <!--Item4-->
      <Image Width="16" Height="16" Source="Images/warning.bmp" TextSearch.Text="Image4"/><!--选中后,显示为Image4,因为TextSearch.Text设置了-->
      <!--Item5-->
      <StackPanel Orientation="Horizontal" Margin="1">
        <Image Width="16" Height="16" Source="Images/warning.bmp" TextSearch.Text="Image5"/> <!--选中后,显示为空,因为TextSearch.Text的设置不在根节点-->
        <TextBlock Height="16" Text="This is item5"/>
      </StackPanel>
    </ComboBox>
  </Grid>

 下拉列表中的选项也可由ComboBoxItem封装,一下声明等价

      <StackPanel Orientation="Horizontal" Margin="1">
        <Image Width="16" Height="16" Source="Images/warning.bmp" Name="image1"/><!--选中后,编辑框显示image1-->
        <TextBlock Height="16" Text="This is item1"/>
      </StackPanel>

<ComboBoxItem>
                <StackPanel Orientation="Horizontal" Margin="1">
                    <Image Width="16" Height="16" Source="Images/warning.bmp" Name="image1"/>
                    <!--选中后,编辑框显示image1-->
                    <TextBlock Height="16" Text="This is item1"/>
                </StackPanel>
            </ComboBoxItem>

 

 =======================================================================

ListBox对包含的项直接显示,选项组成与ComboBox相同。具有SelectedItems和SelectionMode属性:SelectedItems是一个集合,可包含多项内容。SelectionMode取值有三种:Single——单选;Multiple——多选,点击已选项取消选中,点击未选项则选中;Extended——(多选)按下Shift/Ctrl单击,将选项添加到选中项集合中。

=========================================================================

TabControl

TabScriptPlacement控制Tab标签所在方向,取值为Bottom、Left、Right、Top(默认);SelectedContent和SelectedItem更新不同步

==========================================================================

LIstView / Menu /ToolBar 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows桌面应用程序的技术,它提供了一种灵活且强大的方式来绘制用户界面。在WPF,我们可以使用多种方式创建动态曲线,这里我将提供一种实现方法。 首先,我们可以使用WPF的Canvas元素来创建一个容器,用于显示多条动态曲线。然后,我们可以使用WPF的Path元素来绘制曲线,Path元素可以使用几何路径来定义曲线的形状。 在代码,我们可以创建一个继承自Canvas的自定义控件,并在其内部使用多个Path元素来绘制多条曲线。为了使曲线动态变化,我们可以使用WPF的动画功能,例如使用DoubleAnimation来改变曲线的位置或形状。 具体实现时,我们可以创建一个路径数据数组,每个路径数据代表一条曲线的形状。然后,在控件的Loaded事件创建Path元素,并将路径数据绑定到Path的Data属性上。同时,为每个Path元素添加一个DoubleAnimation,用于控制曲线的动态变化。 当我们希望曲线动态变化时,我们可以通过修改DoubleAnimation的To属性来改变曲线的位置或形状。然后,调用DoubleAnimation的Begin方法来启动动画,曲线将根据设定的动画效果进行变化。 需要注意的是,动态曲线的实现方式有很多种,上述只是一种常见的方法。我们可以根据具体需求,选择合适的方式来实现多条动态曲线。此外,为了达到更好的性能和用户体验,我们还可以对动态曲线进行优化,例如使用多线程绘制、减少计算量等。 总之,通过使用WPF的Canvas和Path元素,以及动画功能,我们可以轻松实现多条动态曲线的显示和变化。这不仅可以使用户界面更加生动和有趣,还可以提供更好的用户交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值