【问题标题】:Xamarin Forms Change label text in FrameXamarin Forms 更改框架中的标签文本
【发布时间】:2020-01-22 22:52:03
【问题描述】:

我有问题。我创建了这个框架:

<Frame BackgroundColor="Black" BorderColor="DarkGray" CornerRadius="20" HeightRequest="40" Padding="10,0,10,0">
    <Label Text="{Binding Name}" FontSize="20" TextColor="White" VerticalOptions="CenterAndExpand"
            HorizontalOptions="CenterAndExpand"/>
    <Frame.GestureRecognizers>
        <TapGestureRecognizer Tapped="Category_Clicked" />
    </Frame.GestureRecognizers>
</Frame>

在我背后的代码中有这个事件:

List<string> selectedCategories = new List<string>();
private void Category_Clicked(object sender, EventArgs e)
{
    Frame frame = (Frame)sender;

    if (frame.BackgroundColor == Color.Black)
    {
        frame.BackgroundColor = Color.FromHex("#2196F3");
        //Add label text to list
    }
    else
    {
        frame.BackgroundColor = Color.Black;
        //Remove label text from list
    }
}

但我需要从框架内的标签访问文本。我该怎么做?

【问题讨论】:

  • 你绑定到Name,所以只需使用你的VM的Name属性
  • 但是我有多个名字,所以有多个帧
  • 您可以使用Content 属性获取Frame 中的标签。很简单。如果我做错了,请纠正我(我缺少任何最佳实践规则)。

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


【解决方案1】:

FrameContent 属性中获取标签。

private void Frame_Tapped(object sender, EventArgs e)
{
    Frame tappedFrame = (sender as Frame);
    Label childLabel = (tappedFrame.Content as Label);
    var resultText = childLabel.Text;
}

即使您不知道BindingContext 的类型也可以使用。

【讨论】:

    【解决方案2】:
    <Frame BackgroundColor="Black" BorderColor="DarkGray" CornerRadius="20" HeightRequest="40" Padding="10,0,10,0">
    <Label x:Name = "MyTxt" Text="{Binding Name}" FontSize="20" TextColor="White" VerticalOptions="CenterAndExpand"
            HorizontalOptions="CenterAndExpand"/>
    <Frame.GestureRecognizers>
        <TapGestureRecognizer Tapped="Category_Clicked" />
    </Frame.GestureRecognizers>
    

    在后面的代码中:

    if (frame.BackgroundColor == Color.Black)
    {
        frame.BackgroundColor = Color.FromHex("#2196F3");
        //Add label text to list
        MyTxt.text = "Some Text";
    }
    else
    {
        frame.BackgroundColor = Color.Black;
        //Remove label text from list
        MyTxt.text = "";
    }
    

    【讨论】:

      【解决方案3】:

      使用BindingContext

      Frame frame = (Frame)sender;
      var item = (MyClassName)frame.BindingContext
      var name = item.Name;
      

      【讨论】:

      • 感谢这工作!我不知道我可以将它绑定到我的 BindingContext,因为它不知道我选择了哪个......
      • 假设这是一个ListView,每一行的BindingContext设置为ItemsSource中的相关项
      • @A.Vreeswijk 如果这有效,那么请确保接受这个作为答案
      猜你喜欢
      • 2019-01-17
      • 2018-03-12
      • 2017-06-05
      • 2017-05-17
      • 1970-01-01
      • 2019-02-21
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多