原文 获取listboxitem在ListBox中的index并转换成abcd

截图如下:

1、实现Converter  获取到listbox,并得到listitem在listbox中的index

  1. public class ItemContainerToZIndexConverter : IValueConverter
  2. {
  3. public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  4. {
  5. var itemContainer = (DependencyObject)value; var itemsControl = Tool.FindAncestor<ListBox>(itemContainer);
  6. int index = itemsControl.ItemContainerGenerator.IndexFromContainer(itemContainer);
  7. switch (index)
  8. {
  9. case : return "A";
  10. case : return "B";
  11. case : return "C";
  12. case : return "D";
  13. }
  14. return null;
  15. }
  16.  
  17. public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  18. {
  19. throw new NotSupportedException();
  20.  
  21. }
  22. }
  23.  
  24. public static class Tool
  25. {
  26. public static T FindAncestor<T>(this DependencyObject obj) where T : DependencyObject
  27. {
  28. var tmp = VisualTreeHelper.GetParent(obj);
  29. while (tmp != null && !(tmp is T))
  30. {
  31. tmp = VisualTreeHelper.GetParent(tmp);
  32. } return (T)tmp;
  33. }
  34. }

2、<Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">

使用数据绑定<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource converter}}"/>

  1. <Window.Resources>
  2. <local:ItemContainerToZIndexConverter x:Key="converter" />
  3. </Window.Resources>
  1. <Style x:Key="ListBoxItemStyle1"
  2. TargetType="ListBoxItem">
  3. <Setter Property="Background"
  4. Value="Transparent" />
  5. <Setter Property="BorderThickness"
  6. Value="0" />
  7. <Setter Property="BorderBrush"
  8. Value="Transparent" />
  9. <Setter Property="Padding"
  10. Value="0" />
  11. <Setter Property="HorizontalContentAlignment"
  12. Value="Left" />
  13. <Setter Property="VerticalContentAlignment"
  14. Value="Top" />
  15. <Setter Property="Template">
  16. <Setter.Value>
  17. <ControlTemplate TargetType="ListBoxItem">
  18. <Border x:Name="LayoutRoot"
  19. BorderBrush="{TemplateBinding BorderBrush}"
  20. BorderThickness="{TemplateBinding BorderThickness}"
  21. Background="{TemplateBinding Background}"
  22. HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
  23. VerticalAlignment="{TemplateBinding VerticalAlignment}">
  24. <VisualStateManager.VisualStateGroups>
  25. <VisualStateGroup x:Name="CommonStates">
  26. <VisualState x:Name="Normal" />
  27. <VisualState x:Name="MouseOver" />
  28. <VisualState x:Name="Disabled">
  29. <Storyboard>
  30. <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
  31. Storyboard.TargetName="LayoutRoot">
  32. <DiscreteObjectKeyFrame KeyTime="0"
  33. Value="{StaticResource TransparentBrush}" />
  34. </ObjectAnimationUsingKeyFrames>
  35. <DoubleAnimation Duration="0"
  36. To=".5"
  37. Storyboard.TargetProperty="Opacity"
  38. Storyboard.TargetName="ContentContainer" />
  39. </Storyboard>
  40. </VisualState>
  41. </VisualStateGroup>
  42. <VisualStateGroup x:Name="SelectionStates">
  43. <VisualState x:Name="Unselected">
  44. <Storyboard>
  45. <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
  46. Storyboard.TargetName="ContentContainer">
  47. <DiscreteObjectKeyFrame KeyTime="0"
  48. Value="White"></DiscreteObjectKeyFrame>
  49. </ObjectAnimationUsingKeyFrames>
  50. </Storyboard>
  51. </VisualState>
  52. <VisualState x:Name="Selected">
  53. <Storyboard>
  54. <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
  55. Storyboard.TargetName="ContentContainer">
  56. <DiscreteObjectKeyFrame KeyTime="0"
  57. Value="Blue" />
  58. </ObjectAnimationUsingKeyFrames>
  59. </Storyboard>
  60. </VisualState>
  61. </VisualStateGroup>
  62. </VisualStateManager.VisualStateGroups>
  63. <Grid>
  64. <Grid.ColumnDefinitions>
  65. <ColumnDefinition Width="auto" />
  66. <ColumnDefinition Width="*" />
  67. </Grid.ColumnDefinitions>
  68. <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource converter}}" />
  69. <ContentControl Grid.Column="1"
  70. x:Name="ContentContainer"
  71. ContentTemplate="{TemplateBinding ContentTemplate}"
  72. Content="{TemplateBinding Content}"
  73. Foreground="{TemplateBinding Foreground}"
  74. HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
  75. Margin="{TemplateBinding Padding}"
  76. VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
  77. </Grid>
  78. </Border>
  79. </ControlTemplate>
  80. </Setter.Value>
  81. </Setter>
  82. </Style>

3、ListBox中 ItemContainerStyle="{StaticResource ListBoxItemStyle1}

获取listboxitem在ListBox中的index并转换成abcd的更多相关文章

  1. C# 中怎么将string转换成int型

    int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可 ...

  2. Linux c字符串中不可打印字符转换成16进制

    本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...

  3. Python3 将configparser从ini文件中读取的内容转换成字典格式

    因为写脚本的用到了,所以研究了下怎么将configparser从ini文件中读取的内容转换成字典格式. 整理一下,希望能对大家有帮助. 从http://stackoverflow.com/questi ...

  4. java中如何把图片转换成二进制流的代码

    在学习期间,把开发过程经常用到的一些代码段做个备份,下边代码内容是关于java中如何把图片转换成二进制流的代码,应该能对各朋友也有用处. public byte[] SetImageToByteArr ...

  5. shell中把大写字母转换成小写字母

    shell中把大写字母转换成小写字母 参考:http://www.jb51.net/article/40257.htm echo "AABBCC" | tr "[:upp ...

  6. WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片

    原文:WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片 1.图片文件转换成Visual对象 private Visual CreateVisual(string imag ...

  7. python 练习题:将列表中的大写字母转换成小写

    将列表中的大写字母转换成小写如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,L1 = ['Hello', 'World', 18, 'Apple', None]请修改列 ...

  8. C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)

    这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项 ...

  9. js获取时间加多山天和时间戳转换成日期

    function huoqu(){    var data = $("#data").val();//获取的时间    var day = $('#day').val();//往后 ...

随机推荐

  1. Delphi主窗口任务栏菜单的问题(转发WM_SYSCOMMAND到Application)

    Delphi的VCL框架在创建应用时TApplication是一个自动创建的隐藏窗口,其它创建的窗口是自动以该窗口为窗口,这就导致创始的主窗口在任务栏的系统菜单只有三项,只要在主窗口的Create事件 ...

  2. 14.3.2.1 Transaction Isolation Levels 事务隔离级别

    14.3.2 InnoDB Transaction Model InnoDB 事务模型 14.3.2.1 Transaction Isolation Levels 事务隔离级别 14.3.2.2 au ...

  3. 指尖上的电商---(12)SolrAdmin中加入多核的还有一种方法

    这一节中我们演示下solr中创建多核的还有一种方法. 接第10讲,首先关闭tomcatserver 1.解压solr-4.8.0后,找到solr-4.8.0以下的example目录下的multicor ...

  4. Android 进行单元測试难在哪-part3

    原文链接 : HOW TO MAKE OUR ANDROID APPS UNIT TESTABLE (PT. 1) 原文作者 : Matthew Dupree 译文出自 : 开发技术前线 www.de ...

  5. OCP读书笔记(15) - 管理SQL性能调优

    SQL Tuning Advisor(STA): 使用oracle提供的程序包进行sql优化 SQL> conn scott/tiger SQL), name )); SQL> inser ...

  6. SQL SERVER中的流程控制语句

    流程控制语句 是指用来控制程序运行和流程分至点额命令.一般指的是逻辑计算部分的控制. 1.Begin End语句 封装了多个T-SQL语句组合,将他们组成一个单元来处理. 一般在条件查询或者循环等控制 ...

  7. js封装好的模仿qq消息弹窗代码

    在我们的日常开发中,或者生活中.常常须要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  8. Codeforces Round #269 (Div. 2) A B C

    先说C 题目链接:http://codeforces.com/problemset/problem/471/C 题目意思:有 n 张卡,问能做成多少种不同楼层(floor)的 house.注意这 n ...

  9. 移动开发平台-应用之星app制作教程

    目前在AppStore.GooglePlay等应用商店里已经有以百万计的Apps,应用程序使移动互联网空间得以无限拓展.很多人梦想着AngryBirds式的奇迹在自己身上发生,他们渴望自己开发的应用程 ...

  10. SE 2014年4月14日

    一. 概述BGP的特点 BGP协议是一种距离矢量协议,基于TCP的179端口,BGP协议不会动态的学习路由,只能将IGP协议学习到的或者静态路由注入到BGP中,成为BGP路由,BGP路由携带有丰富的路 ...