ListViewItem没有接收OnMouseDownEvent和ListView没有调用选择更改回调

时间:2017-05-01 07:38:01

标签: c# wpf xaml listview

我有以下内容:

 <ListView SelectionMode="Multiple" SelectedIndex="{Binding SelectedIdx}" SelectionChanged="ItemsList_SelectionChanged"  MinHeight="200" x:Name="ItemsList" ItemsSource="{Binding Items}" Background="Yellow" Grid.Row="1">
                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <!--  note that the list mode is wide enough to force a wrap to each new line  -->
                            <WrapPanel Width="{Binding ActualWidth, ElementName=ItemsList}" />
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>

                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <local:Item/>
                        </DataTemplate>
                    </ListView.ItemTemplate>

                    <ListView.ItemContainerStyle>
                        <Style TargetType="ListViewItem">
                            <Setter Property="Padding" Value="0"/>
                            <Setter Property="Margin" Value="0"/>
                        </Style>
                    </ListView.ItemContainerStyle>
                </ListView>

每个人&#39;项目&#39; xaml有mousedown回调,但没有被调用,但OnMouseOver是。

从不调用ItemsList_SelectionChanged。

项目xaml非常基本:

<ListViewItem x:Class="Controls.Item"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Controls"
             mc:Ignorable="d" 
             xmlns:ViewModel="clr-namespace:Controls.Controls.Item.ViewModel"
             d:DesignHeight="50" d:DesignWidth="50"
             Width="50"
             Height="50"
             Background="Blue"
             Padding="0,0,0,0"
         MouseLeftButtonDown="ListViewItem_MouseLeftButtonDown">
   <!--  <Grid>
        < ! - - <Label IsHitTestVisible="False"  Width="50" Height="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" Background="Pink"  Content="{Binding Label}"/> - - >
    </Grid> -->
</ListViewItem>

就像我之前说的那样,&#39; ListViewItem_MouseLeftButtonDown&#39; doens也不会被调用,但是如果有一个被调用的MouseOver事件。

1 个答案:

答案 0 :(得分:1)

我相信它是因为父ListViewItem或ListView本身处理PreviewMouseDown事件并将其标记为Handled =“True”。

我有2条建议:

  1. 不要将ListViewItem用作ItemTemplate。正在创建一个包装你的ItemTemplate。

  2. 编写一个行为,用于ItemTemplate的内容。行为应该注册到PreviewMouseDown事件并引发一个Command(从ListView的DataContext中绑定到它)。