none
listItem 的选择效果 RRS feed

  • 问题

  • 你好,

    想问个关于选择ListItems选择效果的问题,现在我有一个treeView或者是listBox,里面的Items是一个图标和一些字符串组成,然后我想把Items的选中只是字符串,而不是整个的item,

    (想放个截图在上,怎么不能上传图片啊)

     

    谢谢

     

    2011年2月21日 4:52

答案

  • 你好 王晶晶,

    根据你的描述,我想大家可以明白你的意思,不用上传图片了。

    我觉得你是想要选中ListView一行中的一个Cell,而不是一行。

    很遗憾的告诉你,这个在WPF中是不支持的,不过你可以自己完成这样的效果。

    方法1): 你可以在给你的Item中的每个Control添加鼠标点击事件,比如PreviewMouseDown,然后在这里进行处理,比如改变Control的背景颜色,然后截断消息的传递(e.handled = true), 这样,ItemsPresenter 就不会得知点击事件,因此也不会被选中。

    方法2): 这个ListView是否选中,从视觉的效果来看是根据背景颜色去判断的,因此,当选中的时候你可以强制不改变Item的背景颜色,这样也会得到没有选中整个行的效果。

    方法3):如果条件允许,你可以考虑使用DataGrid,他可以完成单个Cell的选中。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月21日 5:50
    版主

全部回复

  • 你好 王晶晶,

    根据你的描述,我想大家可以明白你的意思,不用上传图片了。

    我觉得你是想要选中ListView一行中的一个Cell,而不是一行。

    很遗憾的告诉你,这个在WPF中是不支持的,不过你可以自己完成这样的效果。

    方法1): 你可以在给你的Item中的每个Control添加鼠标点击事件,比如PreviewMouseDown,然后在这里进行处理,比如改变Control的背景颜色,然后截断消息的传递(e.handled = true), 这样,ItemsPresenter 就不会得知点击事件,因此也不会被选中。

    方法2): 这个ListView是否选中,从视觉的效果来看是根据背景颜色去判断的,因此,当选中的时候你可以强制不改变Item的背景颜色,这样也会得到没有选中整个行的效果。

    方法3):如果条件允许,你可以考虑使用DataGrid,他可以完成单个Cell的选中。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月21日 5:50
    版主
  • 你好,谢谢你的回复,很满意你给的几个建议。但我还有个问题是关于第二个方法,我怎么强制不改变Item的背景色?

    谢谢

    2011年2月21日 8:38
  • 根绝我的经验,如果你自己定义了你的ListView的ItemTemplate,你可以想怎么改就怎么改的,比如当选中的时候你把这个ListView的Item的背景色设置为Transparent。然后将你的控件设置成其他的颜色。有关ListViewItem的模板设定:

    http://msdn.microsoft.com/en-us/library/ms788717.aspx

     

    你也可以通过下面代码去改变默认的Item选中颜色:

     

            <Style TargetType="ListViewItem">

                <Style.Resources>

                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#50C6"/>

                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#50C6"/>

                </Style.Resources>

            </Style>

     

    这是一个方向,你可以自己发挥一下。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月21日 9:17
    版主
  • <Style x:Key="{x:Type ListViewItem}"
       TargetType="ListViewItem">
       <Setter.Value>
    < ControlTemplate TargetType="ListBoxItem"> <VisualStateManager.VisualStateGroups>
         <VisualStateGroup x:Name="SelectionStates">
        <VisualState x:Name="Unselected" />
        <VisualState x:Name="Selected"/>
           <VisualState x:Name="SelectedUnfocused"/>这个是不是你要的  </VisualStateGroup>
    </ControlTemplate>
      </Setter.Value>
       </Style>
    good luck 
    
    
    2011年2月22日 14:34
  • 你好,

    我试了一下,你的这个代码,貌似有错误啊。那个Setter里面怎么没有property啊?请问能提供一份完整的代码,谢谢!

    2011年2月25日 8:28
  • 你好 HuntFox.Com,

    看到你没回复,我先给王晶晶一个解决方案。

    你好 王晶晶,

    你要就是想去掉那个颜色,你就把ListViewItem的背景色设置成Null不可以么?比如这样:

    <Style TargetType="{x:Type ListViewItem}">

        <Style.Triggers>

            <Trigger Property="IsSelected" Value="True">

                <Setter Property="Background"                                                 Value="{x:Null}" />

                <Setter Property="BorderBrush"                                                 Value="{x:Null}" />

            </Trigger>

        </Style.Triggers>

    </Style>

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月25日 9:45
    版主