单击带有 DataTemplate 的 ListBox,选择 ListBox Item
当您单击 ListBox
内的控件(其 DataTemplate
)时,我想知道它是哪个项目,以便我可以选择该项目。
我有一个带有 ListBox
的 WPF 应用程序。使用DataTemplate
,我在其中有一个TextBlock
和一个Textbox
。
<ListBox PreviewMouseLeftButtonDown="myHandler">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock />
<TextBox />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在,如果您单击 TextBlock,它会选择整个项目。但是,如果您在文本框内单击(重复一下:框,而不是块),它不会选择该项目。
是否有代码可以放在 ListBox 的 PreviewMouseLeftButtonDown 中,可以告诉我单击其 TextBox 的 ListBoxItem 的索引?或者其他选择 ListBoxItem 的方法?
When you click on a control inside the ListBox
(its DataTemplate
), I want to know which item that is so that I can select that item.
I have a WPF application with a ListBox
. Using a DataTemplate
, I have a TextBlock
and a Textbox
inside it.
<ListBox PreviewMouseLeftButtonDown="myHandler">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock />
<TextBox />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Right now, if you click on the TextBlock, it selects the overall item. But if you click inside the TextBox (to repeat: Box, not Block), it doesn't select the item.
Is there code that I can put inside the ListBox's PreviewMouseLeftButtonDown that can tell me the index of the ListBoxItem whose TextBox I clicked? Or some other way to select the ListBoxItem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,我想让您再次看一下 UI 组合...文本框作为列表框的项目很少见。列表框通常是项目的选择器(而不是编辑器)。
如果你真的必须拥有它的话。使用基于 ViewModel 的方法(如果您不熟悉,请搜索 Josh Smith 的 MVVM 文章)。实现这项工作的想法是 VM/ItemVM 监听 TextProperty 的更改通知。一旦获得一个,它就会找到相关的项目并切换该项目的 IsSelected 属性。您需要将 ListItem 的 IsSelected 属性绑定到 VM 的 IsSelected 属性才能使其工作。
First I'd like to you to take a look again at the UI composition... textboxes as items of a listbox are rare. Listboxes are usually selectors (not editors) of items.
With that out of the way.. and if you really must have it. Use a ViewModel based approach (search for Josh Smith's MVVM article if you're new to this). The idea behind making this work would be the VM/ItemVM listen's to TextProperty's Change notification. As soon as it gets one, it finds the relevant item and toggles the item's IsSelected property. You need to bind the ListItem's IsSelected property to the VM's IsSelected property for this to work..
如果您使用 mvvm,请使用 Gishu 提供的方法。
如果没有,您可以使用 TextBox GetFocus 事件,沿着可视化树向上移动直到列表框项并选择它。
if you use mvvm, use the approach Gishu gave.
if not you can use the TextBox GetFocus Event, to walk up the visual tree till the listboxitem and select it.