2011-08-31 20 views
3

我在我的Silverlight .XAML定義中有2個TextBlocks。我希望第二個TextBlock模擬第一個TextBlock的行爲。我發現最簡單的方法是通過元素數據綁定。這是一切都很好,但我得到以下錯誤,當我嘗試綁定到textDecoration屬性:爲什麼不能在Silverlight中綁定TextDecoration?

無法轉換類型「System.Windows.Data.Binding」的對象鍵入 「系統。 Windows.TextDecorationCollection」。

僅供參考,我的XAML看起來像這樣:

<TextBlock x:Name="TextBlock1" Text="Booya" /> 
<TextBlock x:Name="TextBlock2" Text="AnotherBooya" FontSize="{Binding FontSize, ElementName=TextBlock1}" FontFamily="{Binding FontFamily, ElementName=TextBlock1}" TextDecorations="{Binding TextDecorations, ElementName=TextBlock1}"/> 

如果我刪除TextDecorations = 「{結合TextDecorations,的ElementName = txt_FanName}」 的一部分,那麼代碼編譯就好了。這是因爲TextDecoration屬性可以接受Null值而其他(I.e .: FontWeight)不能?

我的問題是:爲什麼會出現這種情況?是否有任何解決方法(除了在代碼隱藏中手動設置)?

回答

3

這似乎是設計器中的錯誤。在運行時綁定工作正常。然而,由於設計的原因,它在設計時是一個相當煩人的bug,變得毫無用處。

一個變通,我發現是創建一個「身份」轉換器,那就是簡單地返回輸入值不進行修改的轉換器: -

public class IdentityConverter : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 
} 

有其中之一的本地資源節點和使用它的約束力。這個異常不會立即消失,而是運行該應用程序並返回到設計人員看起來足夠滿意的渲染設計,但綁定下的藍色流水線仍然存在。

一旦你開心Xaml的整個工作,所以你不需要做進一步的設計,你可以刪除這個kludge。

+0

謝謝!我的設計非常紮實,所以幸運的是,這些影響並不會對我造成太大影響。 –

0

我已經添加了TextDecorations在初始化代碼(例如構造函數)對我的控制,其中TextBlock駐留如下綁定:

//The following are because of bug in the XAML designer 
Binding binding = new Binding("fontUnderln"); // fontUnderln is a property in my DataContext 
txtBlockDlgImgTiltle.SetBinding(TextBlock.TextDecorationsProperty, binding); 
txtBlockDlgImgText.SetBinding(TextBlock.TextDecorationsProperty, binding); 
相關問題