【发布时间】:2012-11-27 16:37:02
【问题描述】:
摘要:单击列表框项,DataTemplate 中的文本框获得焦点,但未选择列表框项。
我确定这与事件冒泡有关,但我在这里遗漏了一些东西。
我有列表框。每个 ListBoxItem 的 ContentTemplate 都分配给一个 DataTemplate,其中包含一个简单的文本框。
此文本框旨在显示为虚假的可编辑标签。
问题:单击文本框时,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>
【问题讨论】:
-
我在您的 ListView 中看不到
ItemTempl的用法。你也没有解释ContainerStyle是什么。
标签: c# wpf events datatemplate listboxitem