2011-06-07 124 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