как правильно использовать элемент нажмите в gridview - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть gridview, который представляет всех пользователей, которые есть в моей базе данных, и их детали, я хочу, чтобы по щелчку пользователя (в gridview) их детали могли отображаться отдельно.сторона сетки, и там я мог бы изменить их соответственно.Однако я не уверен, как это сделать.У меня есть событие ItemClick в моем виде сетки, и оно распознает, нажимаю ли я на элемент, но я не знаю, как получить информацию о конкретном кликнувшем пользователе, чтобы я мог представить их на стороне.У меня также есть другая проблема - по какой-то причине он не распознает и не позволяет мне щелкать по любому из элементов верхней строки в виде сетки - только те, что под ним, кто-нибудь знает почему?

это моеXAML:

<Page
x:Class="My_Little_Animal.ShowUsers"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:My_Little_Animal"
xmlns:data="using:My_Little_Animal" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
    <Grid.Background>
        <ImageBrush ImageSource="/Assets/changeUserDetailesBackground.jpg"></ImageBrush>
    </Grid.Background>
    <Grid.RowDefinitions>
        <RowDefinition Height="8*" />
        <RowDefinition Height="147*"/>
        <RowDefinition Height="100" />
    </Grid.RowDefinitions>
    <GridView Name="grid1" ItemClick="grid1_ItemClick" IsItemClickEnabled="True" Margin="-70,151,692,50" Grid.RowSpan="2" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <GridView.ItemTemplate>
            <DataTemplate x:DataType="data:User">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <StackPanel Margin="100,20,0,0">
                        <TextBlock Name="t1" FontSize="20" GotFocus="t1_GotFocus" Text="{x:Bind UserId}"/>
                        <TextBlock Name="t2" FontSize="20" GotFocus="t2_GotFocus" Text="{x:Bind Password}"/>
                        <TextBlock Name="t3" FontSize="20" GotFocus="t3_GotFocus" Text="{x:Bind UserName}"/>
                        <TextBlock Name="t4" FontSize="20" GotFocus="t4_GotFocus" Text="{x:Bind Email}"/>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
    <Canvas>
        <Image Name="loginTitle" Source="/Assets/ShowUsersTitle.png" RenderTransformOrigin="0.5,0.5" Grid.RowSpan="2" Canvas.Left="-325" Canvas.Top="-120" Height="462" Width="1875"/>
        <TextBlock Grid.Row="2" Name="ResultTextBlock" FontSize="24" Foreground="Red" FontWeight="Bold" Height="169" Margin="0,0,0,-69"/>
        <Image Name="editTheUserName" Width="100" Height="35" Visibility="Visible"  Source="/Assets/editIcon.png" RenderTransformOrigin="0.5,0.5" Grid.Row="1" Canvas.Left="852" Canvas.Top="226" />
        <Image Name="CancelTheUserNamE" Width="100" Height="35" Visibility="Visible" Source="/Assets/xIcon.png" RenderTransformOrigin="0.485,0.529" Grid.Row="1" Canvas.Left="848" Canvas.Top="224" />
        <TextBlock Visibility="Visible" Name="theUserItself" FontFamily="Comic Sans MS"  FontWeight="ExtraBold" FontStyle="Italic" FontSize="25"  Text="your user name  " RenderTransformOrigin="0.496,1.165" Foreground="#FF283D6C" Grid.Row="1" Canvas.Left="1103" Canvas.Top="219" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
        <TextBlock Name="userName" FontFamily="Comic Sans MS"  FontWeight="ExtraBold" FontStyle="Italic" FontSize="25"  Text="User Name : " RenderTransformOrigin="0.496,1.165" TextDecorations="Underline" Grid.Row="1" Canvas.Left="922" Canvas.Top="224"/>
        <TextBox Visibility="Visible" Width="200" Name="UserNameText" MaxLength="50" FontFamily="Comic Sans MS" FontStyle="Italic" FontSize="15" BorderThickness="3" BorderBrush="#FF23677D" Grid.Row="1" Canvas.Left="1099" Canvas.Top="223" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
        <Button Visibility="Visible" Name="changeuserName" Height="49" Width="140" FontSize="20" Content="change" FontWeight="ExtraBold" BorderBrush="White" Foreground="White" BorderThickness="2" Background="#FF191A5C" HorizontalAlignment="Center" VerticalAlignment="Top" RenderTransformOrigin="0.45,0.536" Grid.Row="1" Canvas.Left="1305" Canvas.Top="210" Margin="0,0,0,0"/>
        <Image Name="editTheEmail" Canvas.Top="286" Canvas.Left="850" Width="100" Height="35" Visibility="Visible"  Source="/Assets/editIcon.png" RenderTransformOrigin="0.49,0.557" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        <Image Name="CancelTheEmail" Width="100" Height="35" Visibility="Visible" Source="/Assets/xIcon.png" RenderTransformOrigin="0.485,0.529" Grid.Row="1" Canvas.Left="847" Canvas.Top="284" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        <TextBlock Visibility="Visible" Name="theEmailItself" FontFamily="Comic Sans MS"  FontWeight="ExtraBold" FontStyle="Italic" FontSize="25"  Text="your email " RenderTransformOrigin="0.496,1.165" Foreground="#FF283D6C" Grid.Row="1" Canvas.Left="1105" Canvas.Top="276"/>
        <TextBlock Name="Email" FontFamily="Comic Sans MS"  FontWeight="ExtraBold" FontStyle="Italic" FontSize="25"  Text="Email : " RenderTransformOrigin="0.496,1.165" TextDecorations="Underline" Grid.Row="1" Canvas.Left="921" Canvas.Top="283" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        <TextBox Visibility="Visible" Width="200" Name="EmailText" MaxLength="50" FontFamily="Comic Sans MS" FontStyle="Italic" FontSize="15" BorderThickness="3" BorderBrush="#FF23677D" Grid.Row="1" Canvas.Left="1093" Canvas.Top="284" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
        <Button Visibility="Visible" Name="changeEmail" Height="49" Width="140" FontSize="20" Content="change" FontWeight="ExtraBold" BorderBrush="White" Foreground="White" BorderThickness="2" Background="#FF191A5C" HorizontalAlignment="Center" VerticalAlignment="Top" RenderTransformOrigin="0.45,0.536" Grid.Row="1" Canvas.Left="1302" Canvas.Top="274" Margin="0,0,0,0"/>
        <Image Name="theReturn" Height="100" Width="100" Tapped="theReturn_Tapped_1" Source="/Assets/theReturnIcon.png" RenderTransformOrigin="0.493,0.496" Grid.RowSpan="2" Canvas.Left="65" Canvas.Top="27" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
    </Canvas>
</Grid>

Код C #:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Xml;
using System.Data;
using Windows.UI.Popups;


// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238

namespace My_Little_Animal
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class ShowUsers : Page
    {
        regitration.regitrationSoapClient cal;
        public ShowUsers()
        {
            this.InitializeComponent();
            cal = new regitration.regitrationSoapClient();
            getData();
        }

        public async void getData()
        {
            regitration.getUserTableResponseGetUserTableResult r = await cal.getUserTableAsync();
            List<User> theUserList = new List<User>();
            User u = null;
            XmlReader xr = r.Any1.CreateReader();
            XmlDocument document = new XmlDocument();
            document.Load(xr);
            XmlNodeList theXmlList = document.GetElementsByTagName("Table");
            foreach (XmlElement item in theXmlList)
            {
                u = new User();
                foreach (XmlNode node in item.ChildNodes)
                {
                    switch (node.Name)
                    {
                        case "userId": u.UserId = int.Parse(node.InnerText); break;
                        case "password": u.Password = node.InnerText; break;
                        case "userName": u.UserName = node.InnerText; break;
                        case "email": u.Email = node.InnerText; break;
                    }
                }
                theUserList.Add(u);
            }
            grid1.ItemsSource = theUserList;
        }

        private async void grid1_ItemClick(object sender, ItemClickEventArgs e)
        {
            var dialog = new MessageDialog("The item that was clicked is : ");
            await dialog.ShowAsync();
        }

        private void t1_GotFocus(object sender, RoutedEventArgs e)
        {

        }

        private void t2_GotFocus(object sender, RoutedEventArgs e)
        {

        }

        private void t3_GotFocus(object sender, RoutedEventArgs e)
        {

        }

        private void t4_GotFocus(object sender, RoutedEventArgs e)
        {

        }

        private void theReturn_Tapped_1(object sender, TappedRoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(Administrator));
        }
    }
}

Я буду очень благодарен за любую помощь, это действительно важно для меня!

1 Ответ

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

но я не знаю, как получить информацию о конкретном кликнувшем пользователе, чтобы я мог представить их на стороне.

Есть много способов получить элемент при нажатии на элементсобытие.если вы использовали шаблон MVVM , рекомендуемый способ - команда связывания.Более подробно вы можете сослаться на этот случай .

В общем, вы можете подписаться на ItemClick событие и получить ClickedItem от события ItemClickEventArgs

Пример

private void VideoGridView_ItemClick(object sender, ItemClickEventArgs e)
{
    var vedio = e.ClickedItem as VideoItem;          
    var item = new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri(vedio.videoUri))); 
    mediaPlayerElement.Source = item;
}

У меня также есть другая проблема - по какой-то причине она не распознает и не позволяет мне нажимать на элементы верхней строки в виде сетки- только те, что под ним, кто-нибудь знает почему?

Я не смог воспроизвести эту проблему, пожалуйста, проверьте, есть ли какой-то элемент, покрывающий верхнюю строку вверх, потому что вид сетки не может быть нажат.

...