Xamarin Forms Изменить текст метки во фрейме - PullRequest
0 голосов
/ 23 января 2020

У меня проблема. Я создал этот фрейм:

<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
    }
}

Но мне нужно получить доступ к тексту с метки внутри фрейма. Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 23 января 2020

Получить метку из Content свойства Frame.

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

Работает, даже если вы не знаете тип BindingContext.

1 голос
/ 23 января 2020
<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 = "";
}
0 голосов
/ 23 января 2020

используйте BindingContext

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