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

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 …
  • 哦,我会自己尝试:((但没有希望,我知道)
  • 等等等等我可以
  • 你真是太好了^^


来源:https://www.codenong.com/41205210/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9624.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?