摘要:单击列表框项,DataTemplate 中的文本框获得焦点,但未选择列表框项。
我确定这与事件冒泡有关,但我在这里遗漏了一些东西。
我有列表框。每个 ListBoxItem 的 ContentTemplate 都分配给一个包含简单文本框的 DataTemplate。
此 TextBox 旨在显示为虚假的可编辑标签。
问题:单击文本框时,ListBox 的 selectedItem 没有被更新。文本框正在吞噬 mousedown 事件,并且永远不会通知列表框更新到新项目。
我觉得我在这里错过了一些愚蠢的东西。有任何想法吗?有没有办法强制事件冒泡到父 ListView?
我已经尝试了从使文本框的背景为 Null 到处理 previewmousedown 事件和设置 e.handled = false; 的所有方法。
数据模板:
<DataTemplate x:Key="ItemTempl">
<TextBox Height="20" Width="200" Name="tbox" Text="{Binding WordText}" HorizontalAlignment="Stretch">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="{x:Null}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsFocused, ElementName=tbox}" Value="True">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
列表显示:
<ListView HorizontalAlignment="Stretch" ItemsSource="{Binding Something.Words}" Name="MainListView" SelectedItem="{Binding CurrentItem, Mode=TwoWay}" BorderThickness="0" ItemContainerStyle="{StaticResource ContainerStyle}">
</ListView>