Подтвердить что ты не робот

Xamarin.Forms: неправильное выравнивание текста кнопки после нажатия (Android)

У меня проблема с Xamarin.Forms(версия 1.2.2) на Android (Nexus 5). Выравнивание Button.Text часто не центрируется после выполнения щелчка.

В коротком проекте я выяснил, что обновление пользовательского интерфейса вызывает проблему.

public class App
{
    public static Page GetMainPage()
    {   
        var label = new Label {
            Text = "label",
        };
        var buttonBad = new Button {
            Text = "buttonBad",
            Command = new Command(() => label.Text += "1"),
        };
        var buttonGood = new Button {
            Text = "buttonGood",
        };

        return new ContentPage { 
            Content = new StackLayout {
                Children = {
                    buttonBad,
                    buttonGood,
                    label,
                }
            }
        };
    }
}

Нажмите кнопку "buttonBad" (обновление label.Text), поэтому выравнивание текста этой кнопки больше не будет центрировано. Щелчок "buttonGood" не вызывает проблемы.

Есть ли хороший способ решения этой проблемы?

Это обходное решение кажется слишком сложным: http://forums.xamarin.com/discussion/20608/fix-for-button-layout-bug-on-android

nhL41.png

изменить Программное редактирование пользовательского интерфейса также приводит к ошибке. Изменение label.Text в асинхронном методе после короткого ожидания приводит к тому, что "buttonGood" выравнивает текст после щелчка.

edit2: Я создал пример/тестовый проект на GitHub: https://github.com/perpetual-mobile/ButtonTextAlignmentBug.git Выравнивание правильное, когда StackLayout заменяется на AbsolutLayout, но мне нужно, чтобы StackLayout работал хорошо.

4b9b3361

Ответ 1

Хорошо, после нескольких часов работы с этой глупой ошибкой я разрешил ее, выполнив собственный рендеринг и переопределив ChildDrawableStateChanged:

public override void ChildDrawableStateChanged(Android.Views.View child) 
{
    base.ChildDrawableStateChanged(child); 
    Control.Text = Control.Text; 
}

Ответ 2

То же самое происходит, когда я скрываю ярлык, меняю его содержимое и показываю его снова. Любые предложения?