none
listbox不能高亮显示选择项 RRS feed

  • 常规讨论

  • 没有为listbox设置style和template,也没有更改默认的属性,但是绑定dataset以后就是不能高亮显示选择的项,希望高手赐教啊

    这是声明的语句
    <ListBox x:Name="LbxProgrammer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    
    
    
    

    P.S.我新建另外一个项目就可以正常使用listbox,显示,高亮之类的都没问题
    P.S.2 同样是原先这个项目,WPFtoolkit中的Datagrid也不能高亮当前选择的行(即使选择模式已经改为extended和fullrow),只能高亮当前选择的单个cell
    2009年8月4日 8:07

全部回复

  • 你好,
    -->没有为listbox设置style和template,也没有更改默认的属性,但是绑定dataset以后就是不能高亮显示选择的项,
     你是什么默认属性都没改吗?我重现了一个简单的程序,运行正常.
    XAML:

     <StackPanel>

            <ListBox Name="listBox">

                <ListBox.ItemTemplate>

                    <DataTemplate>

                        <StackPanel Orientation="Horizontal">

                            <TextBlock Text="{Binding ID}"  />

                            <TextBlock Text="{Binding Name}"  />

                        </StackPanel>

                    </DataTemplate>

                </ListBox.ItemTemplate>

            </ListBox>

    </StackPanel>

    Code in the behind:

      public Window1()

            {

                InitializeComponent();

                listBox.ItemsSource = CreateData().DefaultView;

            }

            public DataTable CreateData()

            {

                DataTable table = new DataTable();

                table.Columns.Add("ID");

                table.Columns.Add("Name");

                table.Rows.Add(new  object[]{"1","Name1"});

                table.Rows.Add(new object[] { "2", "Name2" });

                return table;

      }


    -->P.S.我新建另外一个项目就可以正常使用listbox,显示,高亮之类的都没问题
    你这个项目和你上面提到不能正常显示高亮的程序有什么不同吗?一般的来说,不能显示选择的高亮只有两个原因,一是你把ListBoxItem默认template里面的那个style trigger 改变了,二是你完全重写了template但是没有实现类似的高亮效果.
    code snippet in ListBoxItem' template:

    <Trigger

             Property="Selector.IsSelected">

        <Setter

                Property="Panel.Background"

                TargetName="Bd">

            <Setter.Value>

                <DynamicResource

                      ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />

            </Setter.Value>

        </Setter>

        <Setter

                Property="TextElement.Foreground">

            <Setter.Value>

                <DynamicResource

                      ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" />

            </Setter.Value>

        </Setter>

        <Trigger.Value>

            <s:Boolean>True</s:Boolean>

        </Trigger.Value>

    </Trigger>
    -->P.S.2 同样是原先这个项目,WPFtoolkit中的Datagrid也不能高亮当前选择的行(即使选择模式已经改为extended和fullrow),只能高亮当前选择的单个cell
    DataGrid控件当前还没有正式发行,你可以在 MS CodePlex上发贴问一下,如有其他问题,可直接联系我:
    Email:v-jimz@microsoft.com
    MSN: zhoujiguo1985@live.cn

    谢谢。


    Jim Zhou -MSFT
    2009年8月10日 7:45
    版主
  • 谢谢您的答复,我后来貌似找到原因了,我的Listbox会自动失去焦点,用Listbox的SelectedChange事件做过实验:
    每次点击Listbox都会触发SelectedChange(即使点击相同的项也会触发),然后Listbox的SelectedIndex就变成-1,没有选择也就不高亮了(所以再次点击相同的项也还是会触发SelectedChange事件).
    现在问题变成为什么Listbox会的SelectedIndex自动变成-1?应该怎么修正?
    2009年8月11日 1:10
  • 你好,
    -->每次点击Listbox都会触发SelectedChange(即使点击相同的项也会触发)
    ListBox.SelectionChanged只有在item的选择变化的时候,才会触发,对同一项的重复连续选择不会触发的.

    -->现在问题变成为什么Listbox会的SelectedIndex自动变成-1?应该怎么修正?
    我用上面的代码测试了一下,结果是正常的.我选第一项显示0, 第二显示1,依次类推.(用我笔记本也测试过了没问题)
      private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                MessageBox.Show(listBox.SelectedIndex.ToString());
            }

    所以我估计是你代码方面的问题,你改出其他默认的设置没?如有问题可通过上面贴子的联系方式直接联系.

    谢谢 .


    Jim Zhou -MSFT
    2009年8月11日 7:41
    版主
  • 应该是其它地方设置了什么东西导致Listbox会自动失去焦点,但是检查了好多遍都没找到原因,后来重做了界面就没事了
    P.S.这帖子麻烦版主删了或锁了吧

    2009年8月11日 8:37
  • 好的, 我想这应该是VS IDE的原因, 正常的ListBox不会出现焦点失动失去的情况,如果你用MSN的话,很愿意交流(我的MSN上面贴子中)
    谢谢.


    Jim Zhou -MSFT
    2009年8月12日 7:24
    版主