如何访问 itemscontrol 中的特定项目并检索 UWP 中的一些数据

How to access a specific item in itemscontrol and retrieve some data in UWP

我的 Page.Xaml 中有一个 ItemsControlDataTemplate,代码如下:

<ItemsControl x:Name="chatUI" VerticalAlignment="Bottom">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="myGrid" Width="340" Background="{Binding Background}" HorizontalAlignment="{Binding GridHorizontalAlign}" Margin="10,0,10,10" MinHeight="45" BorderBrush="#FF003A4F" BorderThickness="0,0,0,2">
                <Polygon Visibility="{Binding RightVisibility}" Fill="{Binding Background}"  Points="0,0 5,6, 0,12" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,0,-5,0" />
                <Polygon Visibility="{Binding LeftVisibility}" Fill="{Binding Background}" Points="5,0 0,6, 5,12" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="-5,0,0,0" />
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Text="{Binding Text}" TextWrapping="Wrap" FontSize="15" FontFamily="Segoe UI" Foreground="White" Margin="10,10,10,0"/>
                    <TextBlock Grid.Row="1" Text="{Binding Time}" TextWrapping="Wrap" FontSize="11" FontFamily="Segoe UI" Foreground="LightGray" Margin="10,0,10,5" VerticalAlignment="Bottom" TextAlignment="Right"/>
                </Grid>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我现在需要的是当我右键单击名为 myGrid 的网格时获取绑定到 TextBlockText。这在 C# 中怎么可能?

我们可以添加Grid的RightTapped事件,当你右键点击Grid时它会被触发。

RightTapped事件中我们可以使用Grid.Children获取Grid的子元素集合。我们可以在名为 myGrid 的根网格中获取 Grid。我们可以使用 Grid.Children 在网格中获取 TextBlock

例如:

private async void myGrid_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
    var RightTapGrid = sender as Grid;
    var childernElements = RightTapGrid.Children;
    foreach (var item in childernElements)
    {
        var grid = item as Grid;
        if (grid != null)
        {
            var itemchildernElements = grid.Children;
            foreach (var text in itemchildernElements)
            {
                var textBlock = text as TextBlock;
                var dialog = new ContentDialog()
                {
                    Title = textBlock.Text,
                    MaxWidth = this.ActualWidth 
                };
                dialog.PrimaryButtonText = "OK";
                dialog.SecondaryButtonText = "Cancel";
                await dialog.ShowAsync();
                break;
            }
        }
    }
}

如果你从 Class 得到你的 Binding DataClassName

你可以试试这个代码

XAML:

<ListView x:Name="chatUI" VerticalAlignment="Bottom" SelectionChanged="chatUI_SelectionChanged">
<ListView.ItemTemplate>
    <DataTemplate>
        <Grid x:Name="myGrid" Width="340" Background="{Binding Background}" HorizontalAlignment="{Binding GridHorizontalAlign}" Margin="10,0,10,10" MinHeight="45" BorderBrush="#FF003A4F" BorderThickness="0,0,0,2">
            <Polygon Visibility="{Binding RightVisibility}" Fill="{Binding Background}"  Points="0,0 5,6, 0,12" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,0,-5,0" />
            <Polygon Visibility="{Binding LeftVisibility}" Fill="{Binding Background}" Points="5,0 0,6, 5,12" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="-5,0,0,0" />
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <TextBlock Text="{Binding Text}" TextWrapping="Wrap" FontSize="15" FontFamily="Segoe UI" Foreground="White" Margin="10,10,10,0"/>
                <TextBlock Grid.Row="1" Text="{Binding Time}" TextWrapping="Wrap" FontSize="11" FontFamily="Segoe UI" Foreground="LightGray" Margin="10,0,10,5" VerticalAlignment="Bottom" TextAlignment="Right"/>
            </Grid>
        </Grid>
    </DataTemplate>
</Listview.ItemTemplate>

并添加 SelectionChanged 事件:

private void chatUI_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ListView view = (ListView)sender;
    //Get Selected Item
    ClassName class = view.SelectedItem as ClassName;
    string path = class.Text;

 // Now we have Text of selected item in Listview 

}