当前位置:  开发笔记 > 编程语言 > 正文

如果选中,则更改ListBox项的WPF DataTemplate

如何解决《如果选中,则更改ListBox项的WPFDataTemplate》经验,为你挑选了3个好方法。

我需要更改ListBox中项目的DataTemplate,具体取决于项目是否被选中(选中时显示不同/更多信息).

当单击有问题的ListBox项目时(仅通过Tab键),我没有在DataTemplate(StackPanel)的最顶层元素上获得GotFocus/LostFocus事件,而且我没有想法.



1> Micah..:

最简单的方法是为"ItemContainerStyle"而不是"ItemTemplate"属性提供模板.在下面的代码中,我创建了2个数据模板:一个用于"未选定",另一个用于"选定"状态.然后我为"ItemContainerStyle"创建一个模板,它是包含该项的实际"ListBoxItem".我将默认的"ContentTemplate"设置为"Unselected"状态,然后提供一个触发器,当"IsSelected"属性为true时,该触发器交换模板.(注意:为了简单起见,我将代码中的"ItemsSource"属性设置为字符串列表)




    



    







在使用它时,我发现我必须在参考资料部分的Style上声明DataTemplates,以免得到神秘的XAML错误.关于这一点,只是一个单挑.

2> Darien Pardi..:

要在选择项目时设置样式,或者不需要做的只是ListBoxItem更改时检索和触发样式更改中的父项IsSelected.例如,下面的代码将创建一个TextBlock默认Foreground颜色为绿色.现在,如果项目被选中,字体将变为红色,当鼠标结束时,该项目将变为黄色.这样,您就不需要像其他答案中所建议的那样为每个您想稍微改变的状态指定单独的数据模板.


    
        
            
        
    



3> Dominic Hopt..:

还应该注意的是,stackpanel是不可聚焦的,所以它永远不会得到焦点(如果你/真的/希望它聚焦,设置Focusable = True).但是,在这样的场景中要记住的关键是Stackpanel是TreeViewItem的子代,在这种情况下是ItemContainer.正如Micah所说,调整itemcontainerstyle是一个很好的方法.

您可以使用DataTemplates以及诸如datatriggers之类的东西来使用RelativeSouce标记扩展来查找listviewitem

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有