Hold event on ListViewItem Windows Phone 8.1

本文关键字:Phone Windows ListViewItem event on Hold | 更新日期: 2023-09-27 18:12:36

我遇到了一个问题,试图从ListView捕获项目上的事件。

WPF示例

<ListView x:Name="itemsListView" IsHoldingEnabled="True" 
ItemContainerStyle="{StaticResource SimpleListItem}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel x:Name="ItemSp" Holding="ItemSp_Holding">
                                <FlyoutBase.AttachedFlyout>
                                    <MenuFlyout>
                                        <MenuFlyoutItem Text="Modifier" />
                                        <MenuFlyoutItem Text="Supprimer" />
                                    </MenuFlyout>
                                </FlyoutBase.AttachedFlyout>
                            <TextBlock Text="{Binding Title}"  />
                         </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

示例代码

private void ItemSp_Holding(object sender, HoldingRoutedEventArgs e)
    {
        Debug.WriteLine("holded");
    } 

样式示例

<Style x:Key="SimpleListItem" TargetType="ListViewItem">
    <Setter Property="BorderThickness" Value="0 0 0 2"></Setter>
    <Setter Property="BorderBrush" Value="{StaticResource FlashGreen}"></Setter>
    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
    <Setter Property="Background" Value="{StaticResource SmoothDark}"></Setter>
    <Setter Property="FontSize" Value="24"></Setter>
</Style>

事件不会在项目上触发(点击或按住,同样的问题)。

在这些ListView事件之外正在工作。

我做错了什么吗?

编辑:

完整的WPF UC

<UserControl
    x:Class="MuchroomPhone.ShopItemsUC"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MuchroomPhone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ResourceDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="9*"></RowDefinition>
            <RowDefinition Height="1*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid x:Name="ItemsGrid">
            <ListView x:Name="itemsListView" IsHoldingEnabled="True" ItemContainerStyle="{StaticResource SimpleListItem}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel x:Name="ItemSp" Holding="ItemSp_Holding">
                                <FlyoutBase.AttachedFlyout>
                                    <MenuFlyout>
                                        <MenuFlyoutItem Text="Modifier" />
                                        <MenuFlyoutItem Text="Supprimer" />
                                    </MenuFlyout>
                                </FlyoutBase.AttachedFlyout>
                            <TextBlock Text="{Binding Title}"  />
                         </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Grid>
        <Grid x:Name="NoItemsGrid">
            <TextBlock Style="{StaticResource EmptyElemTextBox}">Aucun item</TextBlock>
        </Grid>
        <Grid x:Name="AddItemModal" Background="#AA000000" Canvas.ZIndex="1" Visibility="Collapsed">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Rectangle Grid.Row="1" Fill="White"></Rectangle>
            <TextBox x:Name="NewItemTb" VerticalAlignment="Center" Grid.Row="1" PlaceholderText="Nom de l'item" ></TextBox>
            <StackPanel Grid.Row="2" Orientation="Horizontal">
                <Button x:Name="CancelAddItemBtn" Click="CancelAddItemBtn_Click">Annuler</Button>
                <Button x:Name="AddItemBtn" Click="AddItemBtn_Click">Ajouter</Button>
            </StackPanel>
        </Grid>
        <Rectangle Grid.Row="2" Fill="Black"></Rectangle>
        <Button Grid.Row="2" Click="addItem_Click">New Item</Button>
    </Grid>
</UserControl>

Hold event on ListViewItem Windows Phone 8.1

正在研究几乎相同的课题。模板化的listviewitem在模板化的usercontrol中处理usercontrol之外的listview事件

下面的代码将给我usercontrol之外的item_holding事件

内部加载事件lv = Listview

//将事件处理程序设置为视图中的项

   private void ConnectListView( ListView lv , SelectionChangedEventHandler SelectionChanged, HoldingEventHandler Item_holding)
    {
        lv.SelectionChanged += SelectionChanged;
        for (int i = 0; i < lv.Items.Count; i++)
        {
            ListViewItem item = (ListViewItem)lv.ContainerFromIndex(i);
            if (item != null)item.Holding += Item_holding;
        }
    }

//Listview ContainerContentChanging事件

     private void LbContacts_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
    {
        args.ItemContainer.Holding -= lbContactsItem_Holding;
        args.ItemContainer.Holding += lbContactsItem_Holding;
    }

仍然在玩和测试,但似乎它正在工作。我不喜欢在ContainerContentChanging事件中这样做,因为它调用得太频繁了,但现在找不到另一个点。