2011-06-07 115 views
2

也许这是一些微不足道的东西,但我没有想法...在Xaml中设置char属性

本来我想给PasswordBox添加一些功能。因为它是一个密封的类,所以必须复制原始属性,其中包括PasswordChar。看起来微不足道,但是当我开始在Xaml中设置PasswordChar时,我无法摆脱解析器异常。

最后我简单地定义一个新的属性

public char MyProperty {get; set; } 

,并试图按照以下步骤设置在XAML:

<MyPasswordBox MaxLength="3" Password="xxx" MyProperty="c" /> 

我得到一个异常与调用堆栈看起来像

at MS.Internal.XcpImports.CheckHResult() 
at MS.Internal.XcpImports.ConvertStringToTypedCValue() 
at MS.Internal.SilverlightTypeConverter.ConvertFrom() 
at MS.Internal.FrameworkCallbacks.ConvertValueToPropertyType() 
.... 
at MS.Internal.FrameworkCallbacks.SetValueToProperty() 
at MS.Internal.FrameworkCallbacks.SetPropertyAttribute() 
.... 
at System.Windows.Application.LoadComponent() 
.... 

据我所知,类型转换字符串 - > char失败。 请注意,无论何时我将MyProperty的类型更改为字符串(例如),一切正常。

有谁知道如何实现char属性,以便它们可以从Xaml中设置?

Working on Windows Phone 7,也许就是这个问题。 (有限SVL 3)

+0

你可以为XAML绑定创建一个字符串属性,然后用一个自定义getter将char值暴露为其余代码的char值: – 2011-06-07 18:01:05

+0

不知道你的意思。我可能会定义字符串类型的属性,以确保只使用1个字符的字符串。 – 2011-06-08 08:35:36

+0

通过查看SVL代码,它显示它们使用特殊的依赖项属性类型。我的猜测是这个属性增加了string-> char转换到xml解析器。 (请参阅上面的callstack)世界上其他地方很可能不能在Xaml中使用char属性。 – 2011-06-08 08:40:08

回答

1

我无法验证这将起作用,但您可以放弃它。长格式的xaml语法应该可以正常工作。

以下添加到您的命名空间的进口

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

那么下面应该工作

<MyPasswordBox MaxLength="3" Password="xxx"> 
    <MyPasswordBox.MyProperty> 
     <sys:Char>c</sys:Char> 
    </MyPasswordBox.MyProperty> 
</MyPasswordBox> 

另一个解决办法是寻找到类型转换器适用于你的财产,以便它会转换为你的字符串。 Type Convereters and XAML

+0

做到了。 “XamlParseException:未知元素:字符”。使用“ c”设置密码就像魅力一样。 – 2011-06-08 08:04:33

+0

P.S.即使它工作,我仍然想知道为什么PasswordBox允许属性属性的语法属性。 – 2011-06-08 08:06:12

+0

你有没有尝试创建我的财产作为DependencyProperty? – 2011-06-08 11:04:16