我正在开发一个 Windows 应用商店应用程序,并希望显示有关在 ListView 或 GridView 中单击的项目的一些附加信息。此信息应显示在单击项目旁边的弹出窗口或弹出窗口中(必须在 C# 中定义,而不是在 XAML 中定义)。
问题是,ItemClick 事件处理程序没有提供有关单击的可视项的信息,而仅提供有关数据项的信息。因此,我没有关于在屏幕上的何处显示 Flyout 或 Popup 的信息。
我正在开发一个 Windows 应用商店应用程序,并希望显示有关在 ListView 或 GridView 中单击的项目的一些附加信息。此信息应显示在单击项目旁边的弹出窗口或弹出窗口中(必须在 C# 中定义,而不是在 XAML 中定义)。
问题是,ItemClick 事件处理程序没有提供有关单击的可视项的信息,而仅提供有关数据项的信息。因此,我没有关于在屏幕上的何处显示 Flyout 或 Popup 的信息。
使用附加的 Flyout:
<DataTemplate x:Key="ListItemTemplate">
<Grid RightTapped="ListRightTapped" Tapped="ListTapped" Background="Transparent">
<Grid>
...
</Grid>
<FlyoutBase.AttachedFlyout>
<Flyout Closed="listFlyout_Closed">
<StackPanel>
...
</StackPanel>
</Flyout>
</FlyoutBase.AttachedFlyout>
</Grid>
</DataTemplate>
和代码:
private void ListRightTapped( object sender, RightTappedRoutedEventArgs e )
{
FlyoutBase.ShowAttachedFlyout( sender as FrameworkElement );
}
我创建了一个与旧的 Windows Phone Toolkit ContextMenuService 一样工作的解决方案。MenuFlyoutService。你可以在我的博客上找到源代码。使用该服务无需在要显示菜单的任何位置订阅事件处理程序。
您的 DataTemplate 看起来像:
<StackPanel>
<local:MenuFlyoutService.MenuFlyout>
<MenuFlyout>
<!-- using the Click event -->
<MenuFlyoutItem Text="reply" Click="OnReplyClicked"/>
<!-- using commanding to DataContext of MenuItem -->
<MenuFlyoutItem Text="retweet" Command="{Binding RetweetCommand}"/>
<!-- using commanding to DataContext of parent list -->
<MenuFlyoutItem Text="favorite"
Command="{Binding DataContext.FavoriteCommand,
ElementName=TweetList}"
CommandParameter="{Binding}"/>
</MenuFlyout>
</local:MenuFlyoutService.MenuFlyout>
<!-- content for template goes here -->
</StackPanel>
您需要做的就是获取 DataContext:
如果您有包含项目的列表:
MyList.ItemSource = new List<Item>();
在 XAML 中:
<ListView x:Name="MyList">
<ListView.ItemTemplate>
<DataTemplate>
<Stackpanel>
<TextBox Text="{Binding Name}" />
<Button Content="Add sth" Click="AddClick" />
</Stackpanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
并在 CodeBehind 中访问项目,同时单击列表上的按钮:
private void AddClick(sender, args){
var senderButton= (Button) sender;
var item = (Item) sender.DataContext; //Item form the list
}
var item 是您要查找的内容