2017-02-12 102 views
1

我正在使用一个xamarin窗体的网格,我有一个事件处理程序,当网格的按钮被点击按钮时我不知道如何知道在哪个行和列中按钮是。Xamarin Grid如何知道哪个按钮被按下

这是我的网格代码:

<Grid x:Name="grid" ColumnSpacing="6" RowSpacing="5" RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Constant=-20}" 
       RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, 
         Property=Height, 
         Factor=0.50 }"> 

<Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
</Grid.RowDefinitions> 
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
</Grid.ColumnDefinitions> 
    <Button x:Name="button1" Text="1" Grid.Row="0" Grid.Column="0" Clicked="handle_clicked"/> 
    <Button x:Name="button2" Text="2" Grid.Row="0" Grid.Column="1" Clicked="handle_clicked"/> 
    <Button x:Name="button3" Text="3" Grid.Row="0" Grid.Column="2" Clicked="handle_clicked"/> 
    <Button x:Name="button4" Text="4" Grid.Row="0" Grid.Column="3" Clicked="handle_clicked"/> 
    <Button x:Name="button5" Text="5" Grid.Row="0" Grid.Column="4" Clicked="handle_clicked"/> 
    <Button x:Name="button6" Text="6" Grid.Row="0" Grid.Column="5" Clicked="handle_clicked"/> 

    <Button x:Name="button7" Text="7" Grid.Row="1" Grid.Column="0" Clicked="handle_clicked"/> 
    <Button x:Name="button8" Text="8" Grid.Row="1" Grid.Column="1" Clicked="handle_clicked"/> 
    <Button x:Name="button9" Text="9" Grid.Row="1" Grid.Column="2" Clicked="handle_clicked"/> 
    <Button x:Name="button10" Text="10" Grid.Row="1" Grid.Column="3" Clicked="handle_clicked"/> 
    <Button x:Name="button11" Text="11" Grid.Row="1" Grid.Column="4" Clicked="handle_clicked"/> 
    <Button x:Name="button12" Text="12" Grid.Row="1" Grid.Column="5" Clicked="handle_clicked"/> 

    <Button x:Name="button13" Text="13" Grid.Row="2" Grid.Column="0" Clicked="handle_clicked"/> 
    <Button x:Name="button14" Text="14" Grid.Row="2" Grid.Column="1" Clicked="handle_clicked"/> 
    <Button x:Name="button15" Text="15" Grid.Row="2" Grid.Column="2" Clicked="handle_clicked"/> 
    <Button x:Name="button16" Text="16" Grid.Row="2" Grid.Column="3" Clicked="handle_clicked"/> 
    <Button x:Name="button17" Text="17" Grid.Row="2" Grid.Column="4" Clicked="handle_clicked"/> 
    <Button x:Name="button18" Text="18" Grid.Row="2" Grid.Column="5" Clicked="handle_clicked"/> 

    <Button x:Name="button19" Text="19" Grid.Row="3" Grid.Column="0" Clicked="handle_clicked"/> 
    <Button x:Name="button20" Text="20" Grid.Row="3" Grid.Column="1" Clicked="handle_clicked"/> 
    <Button x:Name="button21" Text="21" Grid.Row="3" Grid.Column="2" Clicked="handle_clicked"/> 
    <Button x:Name="button22" Text="22" Grid.Row="3" Grid.Column="3" Clicked="handle_clicked"/> 
    <Button x:Name="button23" Text="23" Grid.Row="3" Grid.Column="4" Clicked="handle_clicked"/> 
    <Button x:Name="button24" Text="24" Grid.Row="3" Grid.Column="5" Clicked="handle_clicked"/> 

    <Button x:Name="button25" Text="25" Grid.Row="4" Grid.Column="0" Clicked="handle_clicked"/> 
    <Button x:Name="button26" Text="26" Grid.Row="4" Grid.Column="1" Clicked="handle_clicked"/> 
    <Button x:Name="button27" Text="27" Grid.Row="4" Grid.Column="2" Clicked="handle_clicked"/> 
    <Button x:Name="button28" Text="28" Grid.Row="4" Grid.Column="3" Clicked="handle_clicked"/> 
    <Button x:Name="button29" Text="29" Grid.Row="4" Grid.Column="4" Clicked="handle_clicked"/> 
    <Button x:Name="button30" Text="30" Grid.Row="4" Grid.Column="5" Clicked="handle_clicked"/> 
</Grid> 

和事件处理代码:

void handle_clicked(Object sender, System.EventArgs e) 
    { 
     Button thebutton = (Button) sender; 
     int row = ?; 
     int column = ?; 

     //Display picker view with options 
     //Displaypickerview(); 

    } 

感谢您的帮助。

更新:

你的答案有效,但为什么网格大写。

因为在我的网格代码中我有网格名称小写,所以我认为你会使用小写,所以你在我的网格中搜索按钮。

+0

Grid.GetRow/Grid.GetColumn是静态的Grid类的方法:https://developer.xamarin.com/api/member/Xamarin.Forms.Grid.GetRow/p/Xamarin.Forms.BindableObject/。方法的名称与您的实际网格的名称无关。 – mm8

+0

我觉得有点奇怪,但噢,我工作。 – Cing

回答

7

试试这个:

Button thebutton = (Button) sender; 
int row = Grid.GetRow(theButton); 
int column = Grid.GetColumn(theButton); 
0

关于你的问题,为什么这是大写的网格。

静态方法是不是基于实例的方法。他们直接来自课堂本身。在这种情况下,这是称为“网格”的类。

如果你不明白的类实例VS概念VS对象阅读:

https://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/

它最短的解释,我能找到的:

+0

嗯,我从来没有任何编程课,所以感谢您的链接。有趣的是,你创建了一个账户来发布这个。 – Cing

+0

你注意到了!无论如何,你现在明白为什么它是'网格'而不是'网格'?希望我的回答对你有帮助 –

相关问题