【问题标题】:Xamarin, Can't find another button using x:nameXamarin,使用 x:name 找不到另一个按钮
【发布时间】:2020-03-24 20:13:10
【问题描述】:

在我的 ListView 中查找另一个按钮时遇到了一些问题。

这是 XAML:

<ListView ItemsSource="{Binding QuestionList}"
                                      x:Name="Item_list"
                                      HasUnevenRows="False"
                                      IsVisible="{Binding IsVisible}"
                                      HeightRequest="5400"
                                      RowHeight="180"
                                      BackgroundColor="#BED6E1">

                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <ViewCell>
                                                <StackLayout BackgroundColor="#BED6E1" HorizontalOptions="Center" VerticalOptions="Center">
                                                    <Label Text="{Binding question}" FontSize="16" Padding="10,20,10,10"/>

                                                    <Grid HorizontalOptions="Center" Padding="15,20,0,10">
                                                        <Grid.ColumnDefinitions >

                                                            <ColumnDefinition Width="*" />
                                                            <ColumnDefinition Width="*" />

                                                        </Grid.ColumnDefinitions>


                                                        <Button x:Name="YesButton" Margin="0,0,20,0" Text="YES" FontAttributes="Bold" BorderWidth="2" BorderColor="White" CornerRadius="10" Clicked="YesButton_Clicked" ClassId="YesButton" BackgroundColor="White" />

                                                        <Button x:Name="NoButton" Margin="0,0,20,0" Grid.Column="1" Text="NO" FontAttributes="Bold" BorderWidth="2" BorderColor="White" CornerRadius="10" BackgroundColor="White" Clicked="NoButton_Clicked"  ClassId="NoButton"/>


                                                    </Grid> 
                                                </StackLayout>
                                            </ViewCell>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>

我想做的是,如果我点击 YesButton,YesButton 的边框颜色会改变,它也会改变 NoButton 的边框颜色。

我可以像这样引用单击的按钮:

private void YesButton_Clicked(Object sender, EventArgs e)
        {
            var button = (Button)sender;
            button.BorderColor = Xamarin.Forms.Color.FromRgb(33, 255, 20);

... (and here's some other stuff)
        }

但是我怎样才能同时引用另一个按钮呢?总而言之,如果用户单击是按钮,边框颜色会更改为该按钮,它将“重置”否按钮的边框颜色。

请注意,列表中有很多这样的“是-否”按钮。

我尝试使用 X:name,通过在如下代码中调用另一个按钮:

NoButton.BorderColor = Xamarin.Forms.Color.FromRgb(33, 255, 20);

但它没有找到它并返回错误。有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    为每个是/否按钮使用这些events

    private void Yes_Clicked(object sender, EventArgs e)
    {
       (sender as Button).BorderColor = Xamarin.Forms.Color.FromRgb(33, 255, 20);
       Button NoButton = (sender as Button).Parent.FindByName<Button>("NoButton");
       NoButton.BorderColor = Xamarin.Forms.Color.FromRgb(31, 78, 123); 
    }
    
    private void No_Clicked(object sender, EventArgs e)
    {
       /* Same logic */
       Button YesButton = (sender as Button).Parent.FindByName<Button>("YesButton");
    }
    

    【讨论】:

    • 是的!这成功了!谢谢!您能否进一步解释这一行: Button NoButton = (sender as Button).Parent.FindByName
    • 我刚刚访问了父(网格),并尝试在网格中找到一个名为“NoButton”的按钮。这很简单:)
    • 哦,好的!现在我明白了!我以前尝试过 FindByName 方法,但现在我明白为什么它以前不起作用了!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多