在WPF
,Silverlight
或Windows Phone Silverlight
中,我们有一种很好的方法可以转换为XAML中指定的字符串中的任何类型。
我们唯一要做的就是从TypeConverter
继承,然后用TypeConverterAttribure
标记特定的属性或类,指定框架应该使用哪个转换器。
Universal App XAML
中完全缺少此功能,而Universal App XAML
中最差的功能对价值转换的能力非常有限。
您只能使用bool
,int
,double
,string
这就是它。如果您创建具有类型char
或long
的依赖项属性的自定义控件,则无法在XAML
中分配这些属性。
编译器说它无法从string
转换为char
。
如果您需要在XAML
中为char
等类型分配控件的属性,那么最佳解决方案是什么?
到目前为止,我提出了一个使用{x:Bind Converter={StaticResource PropertyConverter}, ConverterParameter=Value}
的想法,其中基本上将值转换为目标属性类型,并在PropertyConverter
的帮助下调用Convert.ChangeType
。
问题是这种方法在主题目录中的XAMLs
中不起作用,它们基本上是控件模板。它仅适用于UserControls。
在string
中分配时,是否有更好的方法(理想情况下是通用方法)将任何类型从XAML
转换为特定类型?
答案 0 :(得分:0)
转换器是正确的方法。您无法在主题xaml文件中使用x:Bind
的原因(例如在datatemplace内)是需要设置差异的原因。您可以使用Binding
代替x:Bind
。
样品:
Visibility="{Binding IsMenuOpen, Converter={StaticResource BooleanToVisibility}}"
答案 1 :(得分:0)
从创建者的更新开始,您现在可以使用this method复制此行为,来自文章:
namespace CustomControlWithType
{
[Windows.Foundation.Metadata.CreateFromString(MethodName = "CustomControlWithType.Location.ConvertToLatLong")]
public class Location
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Altitude { get; set; }
public static Location ConvertToLatLong(string rawString)
{
string[] coords = rawString.Split(',');
var position = new Location();
position.Latitude = Convert.ToDouble(coords[0]);
position.Longitude = Convert.ToDouble(coords[1]);
if (coords.Length > 2)
{
position.Altitude = Convert.ToDouble(coords[2]);
}
return position;
}
}
}