ListBox ContentControl单击“不选择行”

时间:2014-02-19 18:28:41

标签: .net wpf listbox contentcontrol

这些项目在

<ListBox.ItemTemplate> <DataTemplate>

我遇到的问题是左键单击第一个ContentControl没有选择行
左键单击TextBlock确实选择行

如果我将scrollViewer注释掉它就可以了 所以看起来ScrollViewer正在吃点击。
我将尝试将Visibility移动到ScrollView。

visabilityConverterReverse只返回Visible为false,Collapsed为true 当选择行时,我会替换相同数据的更多字符

<TextBlock Grid.Row="0" Grid.Column="0" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"                                                         
            Text="{Binding Path=FieldDefApplied.FieldDef.DispName}"/>
<ContentControl Grid.Row="0" Grid.Column="1" Margin="2,0,0,0" Padding="0" MouseRightButtonDown="cc_CopyToClip" FontWeight="Normal"
        Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected, Converter={StaticResource visabilityConverterReverse}}"                                                    
        Content="{Binding Path=DispValueShortRunHighlight, Converter={StaticResource stringToXaml}}"/>
<ScrollViewer Grid.Row="0" Grid.Column="1" Grid.RowSpan="3" Margin="5,0,0,0" Padding="0" 
            HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" MaxHeight="140">
    <ContentControl MouseRightButtonDown="cc_CopyToClip" 
        Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected, Converter={StaticResource bvc}}"
        Content="{Binding Path=DispValueRunHighlight, Converter={StaticResource stringToXaml}}"/>
</ScrollViewer>

1 个答案:

答案 0 :(得分:0)

我在使用scrollViewer的小样本中试过这个并且能够重现一个问题。

ScrollViewer可能正在吃掉MouseDown事件,而这些事件无法传递给ListBoxItem。


就像我上面所说的那样是使用Snoop拍摄的引发事件的快照。

如果您点击第一个ContentControl ,它会完美响应,因为 MouseDown事件完美地进入ListBoxItem,因此选择ListBoxItem 。事件流程总结如下:

enter image description here

但是在第二种情况下,当你点击ScrollViewer 中的ContentControl时, ScrollViwer通过处理它来消除MouseDown事件。以下是第二种情况的流程:

enter image description here