`
joking0ne
  • 浏览: 9047 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

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 

 

分享到:
评论

相关推荐

    wpf 后台添加控件(多个)

    最近尝试用wpf在后台动态添加控件,还有个滚动条效果,基本已完成,希望对大家有帮助

    WPF按钮条导航控件

    在WrapPanel基础上设计的按钮条导航控件,可横向/纵向排列按钮,也可以多列排列控件,类似于TabControl的标签条,用于不同页面的导航,但该控件没有容器,通过和Frame控件的配合,实现导航到不同的Page对象,样式可...

    wpf 动态太耐按钮到stackpanel并添加滚动条

    wpf中动态创建按钮并添加到stackpanel中,当按钮数量比较多使用ScrollViewer滚动条

    C#chart控件画多条曲线.zip_C# chart控件_C# 曲线控件_chart 控件_mailp82_多条曲线

    在个一个chart控件内画出多条曲线,并分别设置属性

    WPF.Themes经典的wpf主题样式,包含22种不同样式,一行代码即可改变全部窗体的样式。

    在客户端的Settings.settings配置文件里添加一条Themes键,类型为string,值为相应的主题文件夹名称如WhistlerBlue。 使用时在启动窗体的loaded事件里添加一行 WPF.Themes.ThemeManager.ApplyTheme(Application....

    C# 开发step步骤条控件详解

    现在很多的javascript控件,非常的不错,其中step就是一个,如下图所示: 那么如何用C#来实现一个step控件呢? 先定义一个StepEntity类来存储步骤条节点的信息: public class StepEntity { public string Id { ...

    WPF编程宝典 part1

    17.5.2 修改滚动条 445 17.5.3 控件模板示例 450 17.6 可视化状态 451 17.7 小结 452 第18章 自定义元素 453 18.1 理解WPF中的自定义元素 454 18.2 构建基本的用户控件 456 18.2.1 定义依赖项属性 456 18.2.2 定义...

    WPF实现ScrollViewer滚动到指定控件处

    在前端 UI 开发中,有时,我们会遇到这样的需求:在一个 ScrollViewer 中有很多内容,而我们需要实现在执行某个操作后能够定位到其中指定的控件处;这很像在 HTML 页面中点击一个链接后定位到当前网页上的某个 ...

    wpf slider(滑块随时间滑动) 时间轴

    WPF,Slider的应用,将滑动条作为时间轴,随时间滑动。 下载次数越多所需积分越高,不定期改低积分。

    WPF编程宝典 part2

    17.5.2 修改滚动条 445 17.5.3 控件模板示例 450 17.6 可视化状态 451 17.7 小结 452 第18章 自定义元素 453 18.1 理解WPF中的自定义元素 454 18.2 构建基本的用户控件 456 18.2.1 定义依赖项属性 456 18.2.2 定义...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    BindingSliderDemo 使用Silder滑动条控件。 ButtonBaseDemo 使用Button控件的ButtonBase基类。 ChangeCursorDemo 更改鼠标光标示例。 CursorSimpleDemo 使用鼠标光标的简单示例。 FontFamilyDemo ...

    一款非常好的WPF编程宝典2010 源代码

    第1章 WPF概述 1 1.1 理解Windows图形 1 1.1.1 DirectX:新的图形引擎 1 1.1.2 硬件加速与WPF 2 1.2 WPF:高级API 4 1.2.1 分辨率无关性 5 1.2.2 WPF的演化 9 1.2.3 Windows窗体将继续保留 11 1.2.4 DirectX...

    WPF分页DataGrid

    最近用到WPF的表格控件,需要使用分页功能,找了很多例子都不是很满意。有些是模仿SL做的DataPager导航条,使用的时候还要和DataGrid组合使用,不是很方便。最好还是继承DataGrid的分页表格控件。 于是自己动手封装...

    WPF 记录查询器(Notes)

    对第五的说明:之所以把意见反馈单独拿出是因为:如果那位兄弟姐妹能在使用过程中提出5条有用的建议(包括软件Bug,使用的习惯等,我将会根据您的要求送任意一个模块的源码,如果能提出建设性意见的可以随意指软件中...

    Dragablz:WPF的可拖动和可撕标签控件

    WPF的可撕标签控件,包括停靠,工具窗口和MDI。 在页面末尾说明基本主题,更多主题文档“ n”帮助“ n”的东西: NuGet详细信息在这里: ://www.nuget.org/packages/Dragablz/ 您可以在以下批评开发人员: 或以下...

    WPF自定义TreeView控件样式实现QQ联系人列表效果

    TreeView这个控件对于我来说是用得比较多的,以前做的小聊天软件(好友列表)、音乐播放器(播放列表)、类库展示器(树形类结构)等都用的是TreeView,普通的TreeView并不能满足我们的需求。因此我们需要滴对TreeView进行...

    Apress.Pro.WPF.in.C.Sharp.2008.2nd.Edition.Feb.2008

    WPF编程宝典——使用C# 2008和.NET 3.5(第2版)英文版 目录 第1章 WPF概述 1 1.1 理解Windows图形 1 1.1.1 DirectX:新的图形引擎 1 1.1.2 硬件加速与WPF 2 1.2 WPF:高级API 4 1.2.1 分辨率无关性 5 1.2.2 WPF的...

Global site tag (gtag.js) - Google Analytics