如何在Windows应用商店应用中的ListView / GridView中单击项目显示弹出/弹出窗口

时间:2014-03-14 15:07:44

标签: c# listview windows-store-apps flyout

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

问题是,ItemClick事件处理程序不提供有关所单击的可视项目的信息,而只提供有关数据项的信息。因此,我没有关于在屏幕上显示弹出窗口或弹出窗口的信息。

3 个答案:

答案 0 :(得分:17)

使用附加的弹出窗口:

<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 );
}

答案 1 :(得分:2)

我已经创建了一个与旧的Windows Phone Toolkit ContextMenuService类似的解决方案。 MenuFlyoutService。你可以找到https://www.ablebits.com/office-addins-blog/2013/12/03/remove-carriage-returns-excel/。使用该服务无需在任何想要显示菜单的地方订阅事件处理程序。

您的DataTemplate看起来像:

{{1}}

答案 2 :(得分:-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中,单击列表上的按钮访问Item:

private void AddClick(sender, args){
    var senderButton= (Button) sender;
    var item = (Item) sender.DataContext; //Item form the list
}

var item是你正在寻找的