7

我正在开发一个 Windows 应用商店应用程序,并希望显示有关在 ListView 或 GridView 中单击的项目的一些附加信息。此信息应显示在单击项目旁边的弹出窗口或弹出窗口中(必须在 C# 中定义,而不是在 XAML 中定义)。

问题是,ItemClick 事件处理程序没有提供有关单击的可视项的信息,而仅提供有关数据项的信息。因此,我没有关于在屏幕上的何处显示 Flyout 或 Popup 的信息。

4

3 回答 3

17

使用附加的 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 );
}
于 2014-03-14T15:27:30.033 回答
3

我创建了一个与旧的 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>
于 2015-07-31T15:17:09.143 回答
-1

您需要做的就是获取 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 是您要查找的内容

于 2015-03-13T17:09:30.267 回答