问题描述
%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}"/>