我有一个列表框,其中包含一个包含按钮的数据模板。
单击按钮时,我想进入按钮 单击处理程序当前列表框项的索引??
我该怎么做?
马尔科姆
答案 0 :(得分:5)
更合适的答案,
private void Button_Click(object sender, RoutedEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is ListViewItem))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null)
return;
int index = lstBox.ItemContainerGenerator.IndexFromContainer(dep);
}
答案 1 :(得分:2)
希望波纹管代码能为您提供帮助。
private void Button_Click(object sender, RoutedEventArgs e)
{
var b = (Button)sender;
var grid = (Grid)b.TemplatedParent
var lstItem = (ListBoxItem)grid.TemplatedParent;
int index = lstBox.ItemContainerGenerator.IndexFromContainer(lstItem);
// rest of your code here...
}
以上假设的XAML是名为lstBox
的ListBox上的DataTemplate:
<DataTemplate x:Key="template">
<Grid>
<Button Click="Button_Click" Content="Press"/>
</Grid>
</DataTemplate>
答案 2 :(得分:0)
您是否检查过列表框的“SelectedIndex”属性?可以通过单击按钮进行设置。
答案 3 :(得分:0)
可能迟到但在列表框“Items”上使用“IndexOf”会给你索引# 此致
答案 4 :(得分:0)
myListbox.Items.CurrentItem
似乎正是您所寻找的。 p>
答案 5 :(得分:0)
您好,您可以使用ContentPresenter.Content
获取当前项目,而不是当前索引:
<DataTemplate DataType="{x:Type MyModel}">
<StackPanel Orientation="Horizontal" Margin="0 5">
<TextBlock Text="{Binding Title}" />
<Button Content="Active" Click="Button_Click" />
</StackPanel>
</DataTemplate>
并在代码中:
private void Button_Click(object sender, RoutedEventArgs e)
{
var button = e.Source as Button;
var contentPresenter = button.TemplatedParent as ContentPresenter;
var myModel = (MyModel)contentPresenter.Content;
}