【问题标题】:Grid not resizing when child's visibility is changed更改孩子的可见性时网格不调整大小
【发布时间】:2021-03-12 07:15:02
【问题描述】:

我有一个带有网格的 Xamarin 应用程序,其中有一个标签和一个条目。 当我更改Entry的文本时,我希望Label可见,如果为空,则不显示Label。

我创建了一个演示应用程序来验证它与我的代码没有任何关系。但是下面的代码也失败了

MainPage = new ContentPage
{
   Content = new Grid
   {
      ColumnDefinitions = new ColumnDefinitionCollection
      {
         new ColumnDefinition { Width = new GridLength(1,GridUnitType.Auto) },
         new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }
      }
   }
};

Label label;
Entry entry;
Grid mainGrid = ((Grid)((ContentPage)MainPage).Content);
mainGrid.Add(btnDelete = new MR.Gestures.StackLayout
   {
      Children = {
         new ExtendedLabel { Style = Styles.LargeLabelIcon, Text = "\ue634", TextColor = Color.Black }
      },
      WidthRequest = 50
   }, 0, 0);
mainGrid.Children.Add(label = new Label { Text = "TEST", IsVisible = false }, 0, 0);
mainGrid.Children.Add(entry = new Entry { }, 1, 0);
entry.TextChanged += (sender, arg) => label.IsVisible = entry.Text.Length > 0;

有人知道如何解决它吗?

【问题讨论】:

    标签: xamarin grid xamarin.forms


    【解决方案1】:

    我不确定这是否是您想要实现的目标:

    MainPage = new ContentPage
    {
        Content = new Grid
        {
            ColumnDefinitions = new ColumnDefinitionCollection
              {
                new ColumnDefinition { Width = new GridLength(1,GridUnitType.Auto) },
                new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }
              }
        }
    };
    
    Label label;
    Entry entry;
    Grid mainGrid = ((Grid)((ContentPage)MainPage).Content);
    mainGrid.Children.Add(label = new Label { 
        Text = "TEST", 
        IsVisible = false,
        VerticalOptions = LayoutOptions.Center,
        HorizontalOptions = LayoutOptions.Start,
    }, 0, 0);
    mainGrid.Children.Add(entry = new Entry { 
        HorizontalOptions = LayoutOptions.FillAndExpand,
        VerticalOptions = LayoutOptions.FillAndExpand,
        BackgroundColor = Color.Black,
        TextColor = Color.White
    }, 1, 0);
    entry.TextChanged += (sender, arg) => label.IsVisible = entry.Text.Length > 0;
    

    我为控制器添加了垂直和水平选项。

    【讨论】:

    • 它仍然没有显示标签:( 网格没有调整列的大小,所以标签有空间
    • 这是正确的行为吗? media.giphy.com/media/jpAMKvwazudOM/giphy.gif
    • 是的,正是我要找的东西
    • 我已经使用上面发布的代码创建了 .gif,顺便说一句,我正在运行 iOS 版本。
    • 您能否使用 MR.Gestures.StackLayout 获得相同的行为?
    【解决方案2】:

    我刚刚遇到了一个非常相似的问题。我的子组件上的文本更改后,它将被截断。

    问题原来是您不能将网格上的ColumnDefinition* 与孩子上的HorizontalOptions 混合。两者兼有似乎会破坏某些东西。用HorizontalTextAlignment 替换它为我修复了它。

    也许有一天这会对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多