Hide column or row if content is not displayed

So, I have an xaml table with columns, and I would like to hide or collapse the column when the content is not visible.

example: I have this layout:

<Grid >      
    <Button Grid.Column="0" x:Name="FirstButton"  Text="First button" />      
    <Button Grid.Column="1"x:Name="SecondButton"  Text="Second button" />
</Grid>

When FirstButton is not displayed, I want to get this result

  <Grid >      
    <Button Grid.Column="1"x:Name="SecondButton"  Text="Second button" />
</Grid>
+6
source share
1 answer

Answering the question:

  <Grid>      
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{Binding Path=IsVisible, Converter={StaticResource IsVisibleToGridLength}" BindingContext="{x:Reference Firstbutton}"   />
        <ColumnDefinition Width="{Binding Path=IsVisible, Converter={StaticResource IsVisibleToGridLength}" BindingContext="{x:Reference SecondButton}" />
  </Grid.ColumnDefinitions>

  <Button Grid.Column="0" x:Name="FirstButton"  Text="First button" />      
  <Button Grid.Column="1"x:Name="SecondButton"  Text="Second button" />
</Grid>

And for the converter part

class IsVisibleToGridLengthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo language)
    {
        try
        {
            GridUnitType t = GridUnitType.Star;
            if (parameter != null)
            {
                Enum.TryParse<GridUnitType>((string)parameter, true, out t);                    
            }

            if (value != null)
            {
                bool d = (bool)value;
                return d == false ? new GridLength(0,GridUnitType.Absolute) : new GridLength(1, t);
            }
            return null;
        }
        catch (Exception exp)
        {                
            return null;
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo language)
    {
        return null;
    }
}

And, obviously, part of App.xml

<Application  x:Class="MyNameSpace.App"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:class="clr-namespace:MyNameSpace.Class;assembly=MyNameSpace"/>
<Application.Resources>
  <ResourceDictionary>     
    <class:IsVisibleToGridLengthConverter  x:Key="IsVisibleToGridLength"/>   
  </ResourceDictionary>
</Application.Resources>
</Application>

Hope this helps!

+6
source

Source: https://habr.com/ru/post/1016438/


All Articles