【问题标题】:I have two image buttons in my app but I am unable to click the second one (xaml C#)我的应用程序中有两个图像按钮,但我无法单击第二个(xaml C#)
【发布时间】:2022-11-02 10:32:18
【问题描述】:

我正在为一个拼贴项目制作一个应用程序,它是一个鼹鼠,我必须有两个网格并且我都设置了它们,并且两者都有一个图像按钮。在第一个网格中,图像按钮有效,当用户点击鼹鼠时,他们得到 10 分,但在 5x5 的第二个网格中,由于某种原因,ikgbutton 不会单击。

我已经尝试寻找有类似问题的人,但我似乎找不到,并且我尝试了很多次删除和重新编码它以查看是否可以让它工作,并且还尝试完成它的步骤一步一步,但没有注意到我所做的似乎奏效了。

Xaml 代码

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="WackAFlower.MainPage"
             Title="Wack A Flower"
             BackgroundImageSource="garden_field.png">
             
    


    <!--Main page-->
    <StackLayout>

            <!--Titile-->
        <StackLayout>
            <Label FontSize="Title"
                   BackgroundColor="Black"
                   TextColor="#ffeb3b"
                   HorizontalTextAlignment="Center"
                   Margin="0,25,0,0"
                   FontFamily="times"
                   >
                Wack A Flower        
            </Label>
        </StackLayout>

            <!--End game button-->
        <StackLayout>
            <Button Text="Start Game"
                    Margin="50,10,50,0"
                    TextColor="#ffeb3b"
                    BackgroundColor="Black"
                    FontFamily="times"
                    FontSize="Large"
                    Padding="20"
                    >
            </Button>
        </StackLayout>

            <!--Change Grid, Restart and socre-->
        <StackLayout Orientation="Horizontal">
            <Button Text="Change Grid"
                    TextColor="#ffeb3b"
                    BackgroundColor="Black"
                    FontSize="Small"
                    FontFamily="times"
                    Margin="50,25,15,0"
                    ></Button>

            <Button x:Name="BtnSwitch"
                    Clicked="BtnSwitch_Clicked"
                    Text="5x5"
                    TextColor="#ffeb3b"
                    BackgroundColor="Black"
                    FontSize="Small"
                    FontFamily="times"
                    Margin="5,25,15,0"
                ></Button>
            <Label x:Name="LblPoints"
                TextColor="#ffeb3b"
                VerticalTextAlignment="Center"
                Margin="10,25,15,0"
                Padding="15"
                BackgroundColor="Black"
                Text="00"
                ></Label>
            
        </StackLayout>

            <!--intro to the game-->
        <StackLayout>
            <Label Text="Welcome to Wack a Flower, You are a bee on the hunt for flowers, you will have to get a score of 100 to win, good luck have fun"
                   TextColor="#ffeb3b"
                   BackgroundColor="Black"
                   HorizontalTextAlignment="Center"
                   FontFamily="times"
                   FontSize="Medium"
                   FontAttributes="Bold"
                   Margin="25"
                   
                />
        </StackLayout>

            <!--Grid for game-->
        <StackLayout>

            <!--4x4 grid-->
            <Grid x:Name="GridMode4" IsVisible="true" IsEnabled="True"  
                HeightRequest="300" WidthRequest="300" HorizontalOptions="Center" VerticalOptions="Center" Padding="10">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                    <!--Mole Holes-->
                <!--first row-->
                <!--<Button BorderWidth="5" BorderColor="Black" HeightRequest="50" WidthRequest="5" Grid.Row="0" Grid.Column="0" BackgroundColor="red" Text="0,0"/> this is how i was making the grid before-->
                <BoxView Grid.Row="0" Grid.Column="0"  WidthRequest="60" HeightRequest="60"  Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="1"  WidthRequest="60" HeightRequest="60"  Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="2"  WidthRequest="60" HeightRequest="60"  Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="3"  WidthRequest="60" HeightRequest="60"  Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>                
                <!--second row-->
                <BoxView Grid.Row="1" Grid.Column="0"  WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="1"  WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="2"  WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="3"  WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>                
                <!--third row-->
                <BoxView Grid.Row="2" Grid.Column="0" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="1" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="2" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="3" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>                
                <!--fourth row-->
                <BoxView Grid.Row="3" Grid.Column="0" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="1" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="2" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="3" WidthRequest="60" HeightRequest="60" Margin="10" CornerRadius="30" Color="Black" Opacity="0.8"/>

                <!--Imagbutton for grid-->
            <ImageButton x:Name="ImgBtnFlower4x4" Source="mole.png" Grid.Row="1" Grid.Column="1" HeightRequest="60" WidthRequest="60" HorizontalOptions="Center"
                         VerticalOptions="Center" Clicked="ImgBtnFlower_Clicked"></ImageButton>

            </Grid><!--end of grid 4x4-->

            <!--5x5 grid-->
             <Grid x:Name="GridMode5" IsVisible="False" IsEnabled="False"
                HeightRequest="300" WidthRequest="300" HorizontalOptions="Center" VerticalOptions="Center"  Padding="10"> 
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                    <!--Mole Holes-->
                <!--first row-->
                <!--<Button BorderWidth="5" BorderColor="Black" HeightRequest="50" WidthRequest="5" Grid.Row="0" Grid.Column="0" BackgroundColor="red" Text="0,0"/> this is how i was making the grid before-->
                <BoxView Grid.Row="0" Grid.Column="0"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="1"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="2"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="3"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="0" Grid.Column="4"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>                

                <!--second row-->
                <BoxView Grid.Row="1" Grid.Column="0"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="1"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="2"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="3"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="1" Grid.Column="4"  WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>                

                <!--third row-->
                <BoxView Grid.Row="2" Grid.Column="0" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="1" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="2" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="3" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="2" Grid.Column="4" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>                

                <!--fourth row-->
                <BoxView Grid.Row="3" Grid.Column="0" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="1" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="2" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="3" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="3" Grid.Column="4" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>

                <!--fith row-->
                <BoxView Grid.Row="4" Grid.Column="0" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="4" Grid.Column="1" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="4" Grid.Column="2" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="4" Grid.Column="3" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>
                <BoxView Grid.Row="4" Grid.Column="4" WidthRequest="60" HeightRequest="60" Margin="5" CornerRadius="30" Color="Black" Opacity="0.8"/>  

                <!--Imgbutton for grid-->
                <ImageButton x:Name="ImgBtnFlower5x5" Source="mole_two.png" Grid.Row="1" Grid.Column="1" HeightRequest="60" WidthRequest="60" HorizontalOptions="Center"
                         VerticalOptions="Center" Clicked="ImgBtnFlower_Clicked"></ImageButton>
                

            </Grid><!--end of grid 5x5-->
        </StackLayout>

            <!--how to start game-->
        <StackLayout>
            <Label TextColor="#ffeb3b" FontFamily="times" FontSize="Medium" HorizontalTextAlignment="Center" Margin="25" Background="black">
                Once you press start game the flowers will beging to apear so be ready
            </Label>
        </StackLayout>

    </StackLayout> <!--End of main page-->

    

</ContentPage>

C# 代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace WackAFlower
{
    public partial class MainPage : ContentPage
    {

        //gobal variables
        Random _random;//random for use in the movement of the mole


        public MainPage()
        {
            InitializeComponent();
            _random = new Random();
            
            
           
        }//end of main page

        //rest set method
        private void gridrest()
        {
            LblPoints.Text = "0";
        }//end of gridrest

        //4x4 gird
        private void MoleMovement4x4()
        {
            //mole we get giving random rows and cols to move to
            //when the player clicks the mole it will move to a new random postions
            int r = 0, c = 0;
            r = _random.Next(0, 3);
            c = _random.Next(0, 3);

            //move mole to new loc
            ImgBtnFlower4x4.SetValue(Grid.RowProperty, r);
            ImgBtnFlower4x4.SetValue(Grid.ColumnProperty, c);

            //make mole visiable
            ImgBtnFlower4x4.IsVisible = true;
        }//end of MoleMovement 4x4

        //5x5 grid
        private void MoleMovement5x5()
        {
            int r = 0, c = 0;
            r = _random.Next(0, 4);
            c = _random.Next(0, 4);

            //move mole to new loc
            ImgBtnFlower4x4.SetValue(Grid.RowProperty, r);
            ImgBtnFlower4x4.SetValue(Grid.ColumnProperty, c);

            //make mole visiable
            ImgBtnFlower4x4.IsVisible = true;
        }//end of MoleMovement5x5
        
        public void BtnSwitch_Clicked(System.Object sender, System.EventArgs e)
        {
            //check test on button 
            //if its a 5x5, then make 5x grid visible and make the 3x grid invisible
            //if 3x3 then opposite
            //also need to change the text on the button when it swtichs 
            //use switch stament

            switch (BtnSwitch.Text)
            {
                case "5x5"://make 5x5 visible
                    {
                        GridMode4.IsVisible = false;
                        GridMode5.IsVisible = true;
                        BtnSwitch.Text = "4x4";
                        gridrest();
                        break;
                    }

                case "4x4"://make 4x4 visable
                    {
                        GridMode4.IsVisible = true;
                        GridMode5.IsVisible = false;
                        BtnSwitch.Text = "5x5";
                        gridrest();
                        break;
                    }

                default:
                    break;
            }//end of switch

        }//end of btnswtich 

        private void ImgBtnFlower_Clicked(System.Object sender, System.EventArgs e)
        {
        /*
        * making score
        * i. needs to get current socre
        * 2. needs to update score if play hits mole
        */
        int currentPoints = Convert.ToInt32(LblPoints.Text);
        currentPoints += 10;
        LblPoints.Text = currentPoints.ToString();

        /*make the image button dissipear when cliked 
            * use the send obj
            * 
            */
        //MoleMovement
        if (BtnSwitch.Text.Equals("5x5"))
        {
            MoleMovement4x4();
        }
        else if (BtnSwitch.Text.Equals("4x4"))
        {
            MoleMovement5x5();
        }


        ImageButton i = (ImageButton)sender;//save the sender
            
        }//end of ImgBtnflower4x4

        

    }//end of public class

}//end of namespce 

【问题讨论】:

  • 两个按钮使用相同的事件处理程序。您如何确定其中一个不起作用?你有没有在调试器中逐步完成它?
  • 你有错别字。您在MoleMovement5x5 中使用..4x4。修复它们。
  • 我更改了错字,但它仍然无法正常工作,今天花了一天的时间,但似乎仍然无法正常工作。 @Toolmaker史蒂夫

标签: c# android xaml xamarin.forms xamarin.android


【解决方案1】:

你可以在你的BtnSwitch_Clicked方法。设置已启用财产以及可见财产。

public void BtnSwitch_Clicked(System.Object sender, System.EventArgs e)
    {
        //check test on button 
        //if its a 5x5, then make 5x grid visible and make the 3x grid invisible
        //if 3x3 then opposite
        //also need to change the text on the button when it swtichs 
        //use switch stament

        switch (BtnSwitch.Text)
        {
            case "5x5"://make 5x5 visible
                {
                    GridMode4.IsVisible = false;
                    GridMode4.IsEnabled = false;
                    GridMode5.IsVisible = true;
                    GridMode5.IsEnabled = true;
                    BtnSwitch.Text = "4x4";
                    gridrest();
                    break;
                }

            case "4x4"://make 4x4 visable
                {
                    GridMode4.IsVisible = true;
                    GridMode4.IsEnabled = true;
                    GridMode5.IsVisible = false;
                    GridMode5.IsEnabled = false;
                    BtnSwitch.Text = "5x5";
                    gridrest();
                    break;
                }

            default:
                break;
        }//end of switch

    }

希望我的回答能帮到你。

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 2020-07-18
    • 2014-04-19
    • 2011-06-21
    • 2019-10-24
    • 2012-04-15
    • 2023-03-22
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多