【问题标题】:How to determine the clicked item in a gridview如何确定gridview中点击的项目
【发布时间】:2013-04-05 12:51:29
【问题描述】:

我使用此 XAML 代码创建了一个网格视图并向其中添加项目:

<Grid x:Name="MainStack" HorizontalAlignment="Left" Height="628" Grid.Row="1" VerticalAlignment="Top" Width="1366">
        <GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemsGridView"
        AutomationProperties.Name="Items"
        TabIndex="1"
            Grid.RowSpan="2"
        Padding="130,42,116,46"
        ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
        SelectionMode="None"
        IsSwipeEnabled="false"
        IsItemClickEnabled="True"
        Background="#FFFB0404" Margin="0,0,0,0" RenderTransformOrigin="0.489,0.503" ItemClick="MainPage_Click">
            <x:String>Item 1</x:String>
            <x:String>Item 2</x:String>
            <x:String>Item 3</x:String>
            <x:String>Item 4</x:String>
            <x:String>Item 5</x:String>
            <x:String>Item 6</x:String>
            <x:String>Item 7</x:String>
            <x:String>Item 8</x:String>
        </GridView>
    </Grid>

然后我尝试使用这个 C# 代码

 private void MainPage_Click(object sender, ItemClickEventArgs e)
    {
        string output = e.ClickedItem.ToString();
        int ClickValue = Convert.ToInt32(output);
        if (ClickValue == 0)
        {
            this.Frame.Navigate(typeof(ItemsPageRSS));
        }
    }

让应用程序在单击第一项时导航到页面,但它给出了错误。

如果有人能告诉我如何隔离每个 iem 并为每个 iem 添加单独的单击事件,以及如何通过向项目添加标题、副标题和图像来自定义 gridview 项目。 提前谢谢你。

【问题讨论】:

标签: c# xaml gridview microsoft-metro


【解决方案1】:

如果您看不懂 MSDN 示例,我在这里给您一个简单的示例。只需创建新项目并粘贴整个代码即可。

XAML

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <GridView
        x:Name="itemGridView"
        ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
        SelectionMode="None"
        IsItemClickEnabled="True"
        Background="#FFFB0404" 
        ItemClick="MainPage_Click"/>
</Grid>

C#

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var gvData = new ObservableCollection<MyData>();
    for (int i = 0; i < 8; i++)
    {
        gvData.Add(new MyData
        {
            ID = i,
            Image = new BitmapImage(new Uri("ms-appx:///Assets/Logo.png")), //You can add any image
            Title = "Title " + i,
            Subtitle = "Subtitle " + i
        });
    }
    itemGridView.ItemsSource = gvData;
}

private void MainPage_Click(object sender, ItemClickEventArgs e)
{
    MyData output = e.ClickedItem as MyData;
    int ClickValue = output.ID;
    if (ClickValue == 0)
    {
        this.Frame.Navigate(typeof(ItemsPageRSS));
        //TODO : Do whatever you want
    }

    //.....
    //TODO : Do operations for other items as well.
}

您可以在MainPage(XAML 页面)类的范围之外创建MyData 类。

public class MyData
{
    public int ID { get; set; }
    public ImageSource Image { get; set; }
    public string Title { get; set; }
    public string Subtitle { get; set; }
}

【讨论】:

  • 谢谢我现在尝试一下,但它给了我这些错误命名空间名称 ImageSource not found in MyData.cs 和命名空间名称 BitmapImage not found in MainPage.xaml.cs。我做错了什么?请原谅我的小知识
  • 我试过了,stackoverflow 说我没有足够的声誉来做到这一点。我还修改了代码并将其用于拆分页面中的列表视图,它可以工作,但是当我创建一个名为 content 的字符串数组来保存将在拆分页面的滚动查看器中的文本块中显示的内容时,与项目位置相对应,它可以构建、编译和运行,但是当我单击该拆分页面时,它会抛出异常,你明白为什么吗?
  • 什么样的异常? upvote 需要更多代表点,您可以将其标记为答案,只需单击 upvote 和 downvote 按钮下方的复选标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多