概括
我想更好地控制 Xamarin.Forms 中按鈕上的文本呈現,因此我使用了一個包含標簽和按鈕物件的網格。這使我可以更好地控制文本,但是當單擊 Button 時,它具有將 Label 移動到 Button 后面的副作用。
為什么會這樣?UI的順序不應該由子元素添加到Grid的子元素的順序來決定嗎?
細節
我創建了以下代碼來單獨測驗問題:
// The grid can be added directly to a page
var grid = new Grid();
grid.Margin = new Thickness(100, 100);
grid.WidthRequest = 200;
grid.HeightRequest = 200;
var button = new Button();
button.WidthRequest = 80;
button.HorizontalOptions = LayoutOptions.Start;
button.VerticalOptions = LayoutOptions.Fill;
grid.Children.Add(button);
var label = new Label();
label.Text = "This is some text";
label.VerticalOptions = LayoutOptions.Fill;
label.InputTransparent = true;
grid.Children.Add(label);
按鈕的大小使其僅與部分文本重疊,以便清楚地看到按鈕移動到標簽的前面。
在點擊按鈕之前,布局顯示如下:

點擊后,按鈕移動到標簽前面,如下圖所示:

我可以讓文本有一個點擊手勢,但是按鈕在被觸摸時不會播放它的原生效果,所以我想通過點擊按鈕來保持這個功能。
點擊后有沒有辦法將標簽保留在按鈕前面?
編輯
這已經在運行 Android 10 的摩托羅拉 Moto G7 和運行 Android 版本 9 的模擬器上進行了測驗。
請注意,在 Android 硬體上,標簽永久保留在按鈕后面。在模擬器上,當按下按鈕時,標簽會移動到按鈕后面,但在釋放按鈕后會重新出現在頂部。
uj5u.com熱心網友回復:
我做了一個演示并再次出現了問題。這個問題會因為快速渲染器而發生。添加代碼'Forms.SetFlags("UseLegacyRenderers");' 在呼叫 Forms.Init 之前添加到 MainActivity 類。如
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Forms.SetFlags("UseLegacyRenderers");
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/421957.html
標籤:
上一篇:如何使用按鈕獲取檔案路徑?
