【问题标题】:Hide column or row when content is not visible内容不可见时隐藏列或行
【发布时间】:2017-09-05 12:04:04
【问题描述】:

所以我有一个带有列的 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>

【问题讨论】:

    标签: xaml xamarin xamarin.forms portable-class-library collapse


    【解决方案1】:

    回答我自己:

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

    希望对你有帮助!!

    【讨论】:

    • 如果您得到:“系统异常无法解析元素上的名称”原因:BindingContext="{x:Reference Firstbutton}" “Firstbutton”需要是“FirstButton”才能匹配相应的 x:名称。
    猜你喜欢
    • 2019-06-16
    • 2016-11-25
    • 2022-11-16
    • 2012-06-10
    • 2020-10-20
    • 2017-02-25
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多