Как добавить событие в ListView.ItemTemplate - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы иметь ListViewItem с данными из привязки и с 2 событиями.

Мой код:

<ListView.ItemTemplate>
<DataTemplate>
    <Grid Name="MailListViewItem">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold"  Text="{Binding Topic}"/>
        <TextBlock Grid.Column="1" Grid.Row="0" FontSize="8" Foreground="Blue" Text="{Binding Time}"/>
        <TextBlock Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Foreground="Gray" Text="{Binding Text}"/>
    </Grid>
</DataTemplate>

Где я должен поставить MouseDoubleClick="Mail_DoubleClick" MouseLeftButtonUp="Mail_MouseLeftButtonUp"?

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете определить ItemContainerStyle с помощью EventSetters:

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <EventSetter Event="MouseLeftButtonUp" Handler="Mail_DoubleClick" />
            <EventSetter Event="MouseDoubleClick" Handler="Mail_MouseLeftButtonUp" />
        </Style>
    </ListView.ItemContainerStyle>
    ...

Или вы можете обработать события Grid в DataTemplate при условии, что для свойства Background установлено значение some bru sh:

 <Grid Name="MailListViewItem" Background="Transparent" MouseLeftButtonDown="...">

Если вы обрабатываете MouseLeftButtonDown, существует свойство ClickCount MouseButtonEventArgs, которое можно проверить, чтобы определить, был ли элемент дважды нажат:

private void MailListViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (e.ClickCount == 2)
    {
        //doule click
    }
    else
    {
        //click...
    }
}
...