Проблема в том, что Button
глотает щелчок мыши, поэтому ListBoxItem
в ListBox
никогда не получает его, следовательно, он никогда не выбирается. Если вы хотите иметь возможность выбирать элементы при нажатии Button
, вы можете попробовать использовать вместо него ToggleButton
и связать IsChecked
с IsSelected
<DataTemplate x:Key="ButtonItemTemplate">
<ToggleButton Content="{Binding Path=Name}" Width="120" Margin="3,2,3,2"
IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}},
Path=IsSelected,
Mode=TwoWay}"/>
</DataTemplate>
Вы также можете достичь этого с помощью небольшого кода или прикрепленного поведения.
ButtonItemTemplate
<DataTemplate x:Key="ButtonItemTemplate">
<Button Content="{Binding Path=Name}" Width="120" Margin="3,2,3,2"
Click="TemplateButton_Click"/>
</DataTemplate>
Код позади
private void TemplateButton_Click(object sender, RoutedEventArgs e)
{
Button clickedButton = sender as Button;
ListBoxItem listBoxItem = GetVisualParent<ListBoxItem>(clickedButton);
if (listBoxItem != null)
{
listBoxItem.IsSelected = true;
}
}
public static T GetVisualParent<T>(object childObject) where T : Visual
{
DependencyObject child = childObject as DependencyObject;
// iteratively traverse the visual tree
while ((child != null) && !(child is T))
{
child = VisualTreeHelper.GetParent(child);
}
return child as T;
}