我有一个ListBoxItem
模板,其中包含TextBox
元素。当用户点击TextBox
时,我应该将ListBoxItem
作为SelectedItem
的{{1}}。
ListBox
我有以下触发器进行选择:
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel Margin="4,0,4,0">
<TextBlock Text="{Binding Path=Value1, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding Path=Hint, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" />
<TextBox x:Name="TextField"
Margin="2,0,0,0"
Width="{Binding Path=ActWidth, Mode=OneWay}"
Visibility="{Binding Path=VisibleAct, Mode=OneWay}"
/>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
不幸的是,它仅适用于
瞬间,当我改变焦点时,选择消失。
如果我删除触发器,它会正常工作,但选择<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.Resources>
不会触发选择。
如何使选择永久化?
答案 0 :(得分:1)
您的示例无法正常工作,因为如果触发器为false,则ListBoxItem
将获得触发前的值。你的ListBoxItem
就像'呃,我是什么......'。
因此,您必须通过添加绑定其SelectedValue
状态的默认设置器来设置其IsSelected
:
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode="OneWay", RelativeSource={RelativeSource Self}}" />
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
将IsSelected
的默认设置器设置为OneWay
绑定到自身将完成此任务。当触发器为假时,它会设置IsSelected
。
答案 1 :(得分:0)
您可以编写一些代码来设置SelectedItem
的{{1}}属性。您可以处理ListBox
的{{1}}事件:
GotKeyboardFocus
TextBox