我有一个典型的MVVM场景:
我有一个绑定(bind)到StepsViewModels列表的ListBox。
我定义了一个DataTemplate,以便将StepViewModels呈现为StepViews。
StepView UserControl具有一组标签和文本框。
我想做的是选择一个TextBox聚焦时包裹了StepView的ListBoxItem。我尝试使用以下触发器为TextBox创建样式:
<Trigger Property="IsFocused" Value="true">
<Setter TargetName="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}" Property="IsSelected" Value="True"/>
</Trigger>
但是我收到一个错误消息,告诉我TextBoxs没有IsSelected属性。我现在知道了,但目标是一个ListBoxItem。
我该如何运作?
最佳答案
有一个只读属性IsKeyboardFocusWithin,如果有任何子对象被聚焦,它将被设置为true。您可以使用它在触发器中设置ListBoxItem.IsSelected:
<ListBox ItemsSource="{Binding SomeCollection}" HorizontalAlignment="Left">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Width="100" Margin="5" Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>