草庐IT

关于c#:第一次和第二次点击后更改gridView Item背景颜色

codeneng 2023-03-28 原文

Change gridViewItem's background color after first and second click on it

我的意思是在第一次单击后将 gridViewItem 的背景颜色更改为蓝色,在第二次单击后更改为红色,然后是蓝色,然后是红色...

这是我的 c# 代码,但它在 "gvi.Background = new SolidColorBrush(Windows.UI.Colors.Blue);":

上引发了异常 \\'System.NullReferenceException\\'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   private void GridViewItem_Click (Object sender, ItemClickEventArgs e)
    {
        if(e!=null)
        {

            for (int numberOfClick= 1; numberOfClick <100; ++numberOfClick)
            {
                GridViewItem gvi = (GridViewItem)NameOf_ItemClick.ContainerFromItem(e);

                if (numberOfClick % 2 == 0)
                {

                    gvi.Background = new SolidColorBrush(Windows.UI.Colors.Red);

                }
                else
                {
                    gvi.Background = new SolidColorBrush(Windows.UI.Colors.Blue);
                }
            }

        }
    }

这是我的 Xaml 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<Page
x:Class="HNT_listView2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HNT_listView2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:data="using:HNT_listView2.Models"
mc:Ignorable="d">

<Grid Background="Salmon" Margin="0,0,10,0"  >

    <GridView ItemsSource="{x:Bind MyContactList}"
              ItemClick="GridViewItem_Click" Name="NameOf_ItemClick"
              IsItemClickEnabled="True">


        <GridView.ItemTemplate>
            <DataTemplate x:DataType="data:Contact">
                <StackPanel >
                    <FlyoutBase.AttachedFlyout>
                        <MenuFlyout Placement="Top">
                            <MenuFlyoutItem Text="Call"/>
                            <MenuFlyoutItem Text="Send a message"/>
                            <MenuFlyoutItem Text="Delete"/>
                        </MenuFlyout>
                    </FlyoutBase.AttachedFlyout>

                    <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">


                    <Image Width="100" Height="120" Source="{x:Bind Photo}" HorizontalAlignment="Center" Stretch="UniformToFill"/>
                    <StackPanel Orientation="Vertical">
                        <TextBlock FontSize="30" Text="{x:Bind Name}" HorizontalAlignment="Center"/>
                        <TextBlock FontSize="30" Text="{x:Bind Phone}" HorizontalAlignment="Center"/>
                    </StackPanel>
                </StackPanel>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>

    </GridView>


</Grid>

模型中的我的 Contact.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Contact
{
    public string Name { get; set; }
    public string Photo { get; set; }
    public string Phone { get; set; }
}


public class ContactManager
{
    public static List<Contact> GetContacts()
    {
        var contact1 = new List<Contact>();
        contact1.Add(new Contact { Name ="Nguyen Van A", Phone ="0168111222", Photo ="Assets/1.jpg" });
        contact1.Add(new Contact { Name ="Tran Van B", Phone =" 0168333444", Photo ="Assets/2.jpg" });
        contact1.Add(new Contact { Name ="Le Van C", Phone ="0166555666", Photo ="Assets/3.jpg" });

        return contact1;
    }
}

任何帮助将不胜感激,谢谢!

  • 它在哪里抛出异常?指定行。
  • 它在" gvi.Background = new SolidColorBrush(Windows.UI.Colors.Blue);"上引发了异常
  • 捆绑?你有什么绑定的吗?
  • 我已经编辑了。请检查
  • 您将 ItemClickEventArgs 对象 e 而不是单击的项目 e.ClickedItem 传递给 ContainerFromItem
  • 哦,谢谢@DecadeMoon,代码现在可以正常运行了,但是第一次点击后只变成蓝色,不能变成红色


为什么不使用布尔值作为计数器?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   private byte GridViewSwitch = 0;
   private void GridViewItem_Click (Object sender, ItemClickEventArgs e)
    {
        if(e!=null)
        {
            var item = (GridViewItem)NameOf_ItemClick.ContainerFromItem(e);
            switch(GridViewSwitch)
            case 0 : item.Background = new SolidColorBrush(Windows.UI.Colors.Red); GridViewSwitch++;  break ;
           case 1 : item.Background = new SolidColorBrush(Windows.UI.Colors.Blue); GridViewSwitch++;   break ;

            case 2: item.Background = new SolidColorBrush(Windows.UI.Colors.Green); GridViewSwitch=0;   break ;

        }
    }

如果您认为此答案正确且有帮助,请单击左侧的勾号进行批准!

  • 我试过你的代码,没有错误,我可以点击项目但没有颜色变化
  • 但是如果我改回 GridViewItem gvi = (GridViewItem)NameOf_ItemClick.ContainerFromItem(e.ClickedIt??em); if (gvi.Background == new SolidColorBrush(Windows.UI.Colors.Blue)) { gvi.Background = new SolidColorBrush(Windows.UI.Colors.Red); } else { gvi.Background = new SolidColorBrush(Windows.UI.Colors.Blue);第一次点击后会变成蓝色,不能变成红色
  • 第一次单击后变为蓝色,但在第二次单击后未变为红色(仍为蓝色)。顺便说一句,谢谢你的耐心。
  • 修改了整个答案。暂时不会为获得颜色而烦恼。
  • 太好了,它有效,非常感谢@Happypig375。现在我想将其更改为 Red ,然后更改为 Blue ,然后更改为 Green ...
  • 哦,我会自己尝试:((但没有希望,我知道)
  • 等等等等我可以
  • 你真是太好了^^

有关关于c#:第一次和第二次点击后更改gridView Item背景颜色的更多相关文章

  1. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  5. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  6. ruby-on-rails - Rake 任务仅调用一次时执行两次 - 2

    我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里

  7. ruby - 我怎样才能只写一次 "Text"并同时检查 path_info 是否包含 'A' ? - 2

    -if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc

  8. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  9. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  10. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

随机推荐