在XAML UWP中转换原始类型的最佳方法是什么?

时间:2016-02-23 02:08:40

标签: wpf xaml win-universal-app typeconverter

WPFSilverlightWindows Phone Silverlight中,我们有一种很好的方法可以转换为XAML中指定的字符串中的任何类型。

我们唯一要做的就是从TypeConverter继承,然后用TypeConverterAttribure标记特定的属性或类,指定框架应该使用哪个转换器。

Universal App XAML中完全缺少此功能,而Universal App XAML中最差的功能对价值转换的能力非常有限。

您只能使用boolintdoublestring这就是它。如果您创建具有类型charlong的依赖项属性的自定义控件,则无法在XAML中分配这些属性。

编译器说它无法从string转换为char。 如果您需要在XAML中为char等类型分配控件的属性,那么最佳解决方案是什么?

到目前为止,我提出了一个使用{x:Bind Converter={StaticResource PropertyConverter}, ConverterParameter=Value}的想法,其中基本上将值转换为目标属性类型,并在PropertyConverter的帮助下调用Convert.ChangeType

问题是这种方法在主题目录中的XAMLs中不起作用,它们基本上是控件模板。它仅适用于UserControls。

string中分配时,是否有更好的方法(理想情况下是通用方法)将任何类型从XAML转换为特定类型?

2 个答案:

答案 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;
        }
    }
}