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>
正在研究几乎相同的课题。模板化的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事件中这样做,因为它调用得太频繁了,但现在找不到另一个点。