Wpf 单击带有DataTemplate的ListBox,选择ListBox项

Wpf 单击带有DataTemplate的ListBox,选择ListBox项,wpf,listbox,datatemplate,Wpf,Listbox,Datatemplate,当您单击列表框(其数据模板)中的控件时,我想知道是哪个项,以便选择该项 我有一个带有列表框的WPF应用程序。使用DataTemplate,我有一个TextBlock和一个Textbox <ListBox PreviewMouseLeftButtonDown="myHandler"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock

当您单击
列表框
(其
数据模板
)中的控件时,我想知道是哪个项,以便选择该项

我有一个带有
列表框的WPF应用程序。使用
DataTemplate
,我有一个
TextBlock
和一个
Textbox

<ListBox PreviewMouseLeftButtonDown="myHandler">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <TextBlock />
        <TextBox />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

现在,如果单击TextBlock,它将选择整个项目。但是如果您在文本框内单击(重复:Box,而不是Block),它不会选择该项


是否有代码可以放在ListBox的PreviewMouseLeftButtonDown中,告诉我单击其文本框的ListBoxItem的索引?或者以其他方式选择ListBoxItem?

首先,我想让您再次看看UI的组成。。。作为列表框项目的文本框很少出现。列表框通常是项目的选择器(而不是编辑器)


别挡道了。。如果你真的需要的话。使用基于ViewModel的方法(如果您不熟悉此方法,请搜索Josh Smith的MVVM文章)。实现这一点的想法是VM/ItemVM侦听TextProperty的更改通知。一旦它得到一个,它就会找到相关项并切换该项的IsSelected属性。您需要将ListItem的IsSelected属性绑定到VM的IsSelected属性,这样才能工作。

如果使用mvvm,请使用Gishu给出的方法

如果没有,您可以使用TextBox GetFocus事件,在可视化树上走到listboxitem并选择它