Как распознать элемент, в котором элемент в сетке - PullRequest
0 голосов
/ 13 декабря 2018

Я использую «gridview» не только для «отображения», но и для того, чтобы пользователи могли взаимодействовать, например, нажимая кнопку внутри определенного элемента.Предположим, мой вид сетки выглядит следующим образом:

<Gridview>
  <Gridview.Itemtemplate>
    <DataTemplate>
      <StackPanel>
        <Image> </Image>
        <Button> </Button>
      </StackPanel>
   </DataTemplate>
</Gridview.Itemtemplate>

Если я нажму кнопку, все кнопки всех элементов в сетке будут делать то же самое.Как мы можем нажать кнопку и узнать, к какому элементу она принадлежит?

* ПРИМЕЧАНИЕ: если нажать только кнопку, событие «ItemIsSelected» не будет вызываться, поскольку элемент не был нажат, это была кнопка,

1 Ответ

0 голосов
/ 13 декабря 2018

Рассмотрим ваш предмет как объект класса LineItem.После нажатия кнопки можно использовать sender из аргумента события click, чтобы получить DataContext, который будет тем же объектом.

(отправитель как FrameworkElement) .DataContext

// Маленький образец

MainPage.Xaml

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" 
    x:Name="YourPage"

    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <GridView x:Name="GridView">
            <GridView.ItemTemplate>
                <DataTemplate x:DataType="local:LineItem">
                    <StackPanel>
                        <TextBlock Text="{x:Bind Title}"></TextBlock>
                        <TextBlock Text="{x:Bind  description}"></TextBlock>
                        <Button Content="Action" Click="Button_Click"></Button>
                    </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>
    </Grid>
</Page>

MainPage.Xaml.cs

public sealed partial class MainPage : Page
    {
        List<LineItem> MyDictionary = new List<LineItem>();
        public MainPage()
        {
            MyDictionary.Add(new LineItem() { Title = "Item1", description = "Desc1" });
            MyDictionary.Add(new LineItem() { Title = "Item2", description = "Desc2" });
            MyDictionary.Add(new LineItem() { Title = "Item3", description = "Desc3" });
            this.InitializeComponent();
            GridView.ItemsSource = MyDictionary;
        }
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            LineItem clicked_item  =(LineItem)((sender as FrameworkElement).DataContext);
            await (new MessageDialog(clicked_item.Title + " Button is clicked ")).ShowAsync();
        }
    }
    public class LineItem
    {
        public string Title { get; set; }
        public string description { get; set; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...