Работа с GridUnitType.Star в конвертере столбцов сетки - PullRequest
0 голосов
/ 24 октября 2018

Я использую конвертер, чтобы заполнить оставшееся пространство скрытого столбца в WPF (установите ширину на 0,0), но на самом деле мне нужно соотношение 1.7* против *, если оно видно!Как вычислить реальное значение для конвертера?

Конвертер:

public class ColumnWidthConverter : IValueConverter
{
    public object Convert(
        object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {            
        var isVisible = (bool) value;
        var width = parameter as string == "*" 
            ? new GridLength(1, GridUnitType.Star).Value
            : double.Parse(parameter as string);            

        return isVisible ? width : 0.0;            
    }


    public object ConvertBack(
        object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        return Binding.DoNothing;
    }

}

Как вы можете видеть, я пытался использовать new GridLength(1, GridUnitType.Star).Value, но это неправильный путь!

XAML (сжато):

<appf:ViewUserControl.Resources>        
    <local:ColumnWidthConverter x:Key="ColumnWidthConverter" />
</appf:ViewUserControl.Resources>


<Grid.ColumnDefinitions>               
    <ColumnDefinition Width="1.7*"/>
    <ColumnDefinition Width="{Binding Path=Visible, Converter={StaticResource ColumnWidthConverter}, ConverterParameter=*}"/>
</Grid.ColumnDefinitions>

Visible - это просто логическое свойство в соответствующей ViewModel!

1 Ответ

0 голосов
/ 24 октября 2018

Иногда это просто: используйте строку вместо двойного значения

public class ColumnWidthConverter : IValueConverter
{
    public object Convert(
        object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {            
        var isVisible = (bool) value;
        var width = parameter as string;           

        return isVisible ? width : "0.0";            
    }


    public object ConvertBack(
        object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        return Binding.DoNothing;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...