我认为这是一件我想念的简单事情。
我正在编写的WPF应用中有一个ListBox
。每行都有一个按钮,可以根据按钮所在的行执行简单操作。如果用户直接点击该按钮,则SelectedItem
上的ListBox
为空。如果我先单击该行,然后按预期单击SelectedItem
行的按钮。
我希望能够在单击按钮时选择按钮所在的行。再说一遍,我假设我错过了一些简单的东西,但到目前为止,我的搜索空白。
答案 0 :(得分:3)
如果您想在ListBoxItem按钮上选择ListBoxItem
,可以通过将点击处理程序附加到按钮来执行此操作。
假设您有ListBox声明的XAML:
<ListBox x:Name="listBox" ItemsSource="{Binding SourceCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding PropertyName}" Click="Button_Click"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您可以从处理程序中选择listBoxItem:
private void Button_Click(object sender, RoutedEventArgs e)
{
ListBoxItem selectedItem = (ListBoxItem)listBox.ItemContainerGenerator.
ContainerFromItem(((Button)sender).DataContext);
selectedItem.IsSelected = true;
}
访问按钮的DataContext
,它与ListBoxItem的按钮相同。因此,使用它,您可以从ItemContainerGenerator
获取容器元素,即ListBoxItem。
在已获取的listBoxItem上将IsSelected
设置为True
。