2017-04-10 35 views
5

所以我有一个xaml网格与列,我想在内容不可见时隐藏或折叠列。隐藏内容不可见时的列或行

例如: 我有这样的布局:

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

当FirstButton是不可见我想这个结果

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

回答

5

回答自己:

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

而对于转换器部分

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

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

希望它可以帮助!