具有静态资源属性的WPF转换器

问题描述

我有一个转换器,其属性为VisibleLength

%U410

在App.xaml中,我将资源定义为

public class BoolToGridLengthConverter : IValueConverter
{
    public object Convert(object value,Type targettype,object parameter,CultureInfo culture)
    {
        return ((bool)value == true) ? new GridLength(0) : new GridLength(VisibleLength);
    }

    public object ConvertBack(object value,CultureInfo culture)
    {
        return null;
    }

    public double VisibleLength { get; set; }
}

并在xaml中用作

<Application.Resources>
    <ns:BoolToGridLengthConverter
        x:Key="boolToGridLengthConverter"
     />
</Application.Resources>

我如何使用该属性将VisibleLenght property = doubleValue传递给xaml的转换器。

解决方法

如果您希望VisibleLength对于转换器的所有用法都相同,则只需

<ns:BoolToGridLengthConverter x:Key="..." VisibleLength="40"/>

但是,听起来有点像您想在使用站点上做出此决定。在这种情况下,您可以从转换器类中删除该属性,而使用参数:

<RowDefinition
    Height="{Binding Converter={StaticResource boolToGridLengthConverter},ConverterParameter=40,Path=boolProperty}"
/>

,您的实现将发生如下变化:

public object Convert(object value,Type targetType,object parameter,CultureInfo culture)
{
    return (bool)value ? new GridLength(0) : new GridLength(Convert.ToDouble(parameter));
}
,

您甚至可能根本不需要绑定转换器。

只需以RowDefinition样式使用DataTrigger:

<RowDefinition>
    <RowDefinition.Style>
        <Style TargetType="RowDefinition">
            <Setter Property="Height" Value="40"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding boolProperty}" Value="True">
                    <Setter Property="Height" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </RowDefinition.Style>
</RowDefinition>

(可选)将样式声明为资源:

<Application.Resources>
    <Style x:Key="RowDefStyle" TargetType="RowDefinition">
        <Setter Property="Height" Value="40"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding boolProperty}" Value="True">
                <Setter Property="Height" Value="0"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Application.Resources>

...
<RowDefinition Style="{StaticResource RowDefStyle}"/>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...