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

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

截图如下:

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

 public class ItemContainerToZIndexConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var itemContainer = (DependencyObject)value; var itemsControl = Tool.FindAncestor<ListBox>(itemContainer);
            int index = itemsControl.ItemContainerGenerator.IndexFromContainer(itemContainer);
            switch (index)
            {
                case 0: return "A";
                case 1: return "B";
                case 2: return "C";
                case 3: return "D";
            }
            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();

        }
    }

    public static class Tool
    {
        public static T FindAncestor<T>(this DependencyObject obj) where T : DependencyObject
        {
            var tmp = VisualTreeHelper.GetParent(obj);
            while (tmp != null && !(tmp is T))
            {
                tmp = VisualTreeHelper.GetParent(tmp);
            } return (T)tmp;
        }
    }

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

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

 <Window.Resources>
        <local:ItemContainerToZIndexConverter x:Key="converter" />
    </Window.Resources>

 

 <Style x:Key="ListBoxItemStyle1"
               TargetType="ListBoxItem">
            <Setter Property="Background"
                    Value="Transparent" />
            <Setter Property="BorderThickness"
                    Value="0" />
            <Setter Property="BorderBrush"
                    Value="Transparent" />
            <Setter Property="Padding"
                    Value="0" />
            <Setter Property="HorizontalContentAlignment"
                    Value="Left" />
            <Setter Property="VerticalContentAlignment"
                    Value="Top" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border x:Name="LayoutRoot"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Background="{TemplateBinding Background}"
                                HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalAlignment}">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal" />
                                    <VisualState x:Name="MouseOver" />
                                    <VisualState x:Name="Disabled">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
                                                                           Storyboard.TargetName="LayoutRoot">
                                                <DiscreteObjectKeyFrame KeyTime="0"
                                                                        Value="{StaticResource TransparentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <DoubleAnimation Duration="0"
                                                             To=".5"
                                                             Storyboard.TargetProperty="Opacity"
                                                             Storyboard.TargetName="ContentContainer" />
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="SelectionStates">
                                    <VisualState x:Name="Unselected">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
                                                                           Storyboard.TargetName="ContentContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0"
                                                                        Value="White"></DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Selected">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
                                                                           Storyboard.TargetName="ContentContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0"
                                                                        Value="Blue" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="auto" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource converter}}" />
                                <ContentControl Grid.Column="1"
                                                x:Name="ContentContainer"
                                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                                Content="{TemplateBinding Content}"
                                                Foreground="{TemplateBinding Foreground}"
                                                HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                Margin="{TemplateBinding Padding}"
                                                VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

3、ListBox中 ItemContainerStyle="{StaticResource ListBoxItemStyle1}

时间: 2024-09-13 00:50:17

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

请问如何识别图中黑色方块并转换成坐标

问题描述 请问如何识别图中黑色方块并转换成坐标?(有黑色的坐标的值是true,如果没有黑色方块即为false)谁有好的解决方法.方向是有一点歪的. 解决方案 解决方案二:无图yousayajb解决方案三: 解决方案四:引用1楼xdashewan的回复: 无图yousayajb 图发了解决方案五:你是要每个黑色矩形的坐标吗?解决方案六:引用4楼xuzuning的回复: 你是要每个黑色矩形的坐标吗? 是的.其实我是需要知道所有坐标的位置上是黑色方块还是白色方块(白色间隙不算)解决方案七:引用3楼lq

将表中的某个字段转换成标识字段,并保留原来的值

转换 /*--将表中的某个字段转换成标识字段,并保留原来的值  注意,因为要删除原表,所以,如果表和其他表的关联,这些关联要重新创建 --邹建 2003.12--*/ /*--调用示例  exec p_setid '表名','要转换的字段名'--*/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_setid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

Excel表格中快速实现元转换成以万元显示的方法

  Excel表格中快速实现元转换成以万元显示的方法 左表为源表,右表为显示表.右表旁有一个框(万元). 点击框,框内会画一个勾.右表马上会转换成以万元显示. 这样的转换方便吧.下面本文带大家一起动手制作. 制作步骤: 1.开发工具(如果没有,可以通过文件 - 选项 - 自定义功能区 - 右侧框中选取开发工具)- 插入 - 表单控件中选取复选框 - 按左键不松在表中拖画出来. 2.选取复选框(在复选框上右键单击) - 右键菜单中点击"设置控件格式"打开设置对象格式窗口,在窗口中设置单元

在java中如何将输入流转换成数组

问题描述 在java中如何将输入流转换成数组 客户端发送数组,服务器端接受并排序.如何将接受的输入流转换成数组 解决方案 http://outofmemory.cn/code-snippet/11389/java-convert-inputstream-to-byte-array 解决方案二: 如何将伪数组转换成数组 解决方案三: apache comments io包中的IOUtils中有现成的方法 解决方案四: 字符串转化成整形数组?字节数组取出来的值就是0-127的数.

oracle中 如何将拉丁文转换成中文

问题描述 oracle中 如何将拉丁文转换成中文 '???? 我也不知道这个拉丁文是什么意思,有没有哪位大神转换过啊,在线等 解决方案 这是拉丁文还是(乱码了)?确定这是拉丁文? 解决方案二: 这是拉丁文还是(乱码了)?确定这是拉丁文? 解决方案三: 这看上去是一种文字而不是乱码.什么意思嘛,你需要找翻译 解决方案四: oracle11汉字乱码的问题解决方法 鼠标右键"计算机"->"系统属性"->"高级系统设置"->"

后台-C# 中怎样将Ilist转换成List

问题描述 C# 中怎样将Ilist转换成List 我在后台方法中写了一个返回 Ilist集合的sql ,然后将这个集合放进DataSourse中的时候.能看到查询的条数,但是内容却为空. 所以求各位大侠们 指点 解决方案 你是不是用的linq语句写的sql,如果是的话,你把你返回的IList foreach赋值给一个list对象就可以了, var queryResults = from c in customers join o in orders on c.ID equals o.ID sel

如何将一个json中的json字符串转换成一个USER对象。

我是温浩然: 通过Gson 可以将一个JSON,成功的转换为一个用户对象, JSONObject resJSON = JSONObject.fromObject(resData); System.out.println("resJSON"+resJSON); //把json中的user对象获取,并强转. Object userjson = resJSON.get("user"); String userString = userjson.toString(); //

Excel中数字如何自动转换成中文大写数字

平时工作中输入金额时常常需要转成中文大写数字,但输入起来比较麻烦,那么是否可以将数字直接转换成中文大写呢?本教程中就为大家介绍在excel中如何将数字自动转换成中文大写数字. 第一步:打开Excel工作表,鼠标右键单击选中需要显示中文大写数字的单元格(可以批量拉选单元格),在弹出的快捷菜单中选择"设置单元格格式". 第二步:在弹出的对话框中选择"数字"选项卡,并且在"分类"列表中选择"特殊",在类型框中选择"中文大写

在word中如何让简体字转换成繁体字

在word2003版本上,依次点击"工具-语言-中文简繁转换"选项即可对此执行在word中种问题转换了.如在安装Office2003版本时选择的是"最小安装",那么需要确保已安装了Office校对工具中的"繁体-简体中文双向转换"词库.如果没有安装,可再次运行Office安装程序,在"校对工具"下单击"繁体-简体中文双向转换",选择"从本机运行全部程序",然后点"更新"