【发布时间】:2017-06-17 02:30:35
【问题描述】:
这里有点困惑,我似乎已经按照允许我使用值转换器的步骤进行操作。
我用一个键定义了我的转换器,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage Title="Article"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:XamarinMobile.Controls;assembly=XamarinMobile"
xmlns:converters="clr-namespace:XamarinMobile.Converters;assembly=XamarinMobile"
x:Class="XamarinMobile.ArticlePage">
<ContentPage.Resources>
<ResourceDictionary>
<converters:FontSizeConverter x:Key="FontSizeMapper"></converters:FontSizeConverter>
</ResourceDictionary>
</ContentPage.Resources>
然后我在我的 XAML 中使用我的转换器,如下所示:
<ContentView Padding="10,-10,10,0" Grid.Row="2" Grid.Column="0">
<StackLayout>
<Label x:Name="LabelAuthor" FontSize="{Binding 20, Converter={StaticResource FontSizeMapper}, ConverterParameter=20}" />
<Label x:Name="LabelPublishDate" FontSize="{Binding 10, Converter={StaticResource FontSizeMapper}, ConverterParameter=10}"/>
</StackLayout>
</ContentView>
这是我的实际转换器代码:
namespace XamarinMobile.Converters
{
public class FontSizeConverter : Xamarin.Forms.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(value is double)
{
return App.NormalizeFontSize((double)value);
} else
{
return value;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
然后我在我的值转换器中设置了一个断点,但它从未命中。我在这里有什么明显的遗漏吗?我很确定我是按照指示前往发球台的。
【问题讨论】:
-
您正在“绑定”到一个静态值(使用
Binding 20),我认为您应该在您的BindingContext对象中绑定一个属性 -
如果我理解正确,这就是你传递 value 参数的方式。我想传递不同的值,为每个值创建一个属性似乎效率不高。
-
不,您应该绑定到具有值的属性,但在您的情况下,它不是可用作 FontSize 的值。因此,您需要一个转换器将属性中的值转换为 FontSize。想象一下,您绑定到一个属性,该属性包含字符串中的字体大小,例如
"Twenty"。FontSize属性无法理解"Twenty",因此您需要使用转换器对其进行转换。您绑定到包含字符串值的属性并通过转换器对其进行转换。希望这是有道理的。 -
感谢您的回复,但是当我在 XAML 中使用它时,如何将其绑定到属性?你是说这个值需要是一个字符串吗?我不明白。我完全理解 fontsize 不理解“二十”,这就是我传递双精度的原因(实际上是一个整数,但可以被视为双精度)。我遇到的问题是,它甚至没有进入我的价值转换器。
-
我会为此使用附加属性
标签: xamarin xamarin.forms ivalueconverter