我的Silverlight .XAML定义中有2个TextBlocks。我希望第二个TextBlock模拟第一个TextBlock的行为。我发现这样做的最简单方法是通过元素数据绑定。这一切都很好,但是当我尝试绑定到TextDecoration属性时出现以下错误:
无法将类型为“System.Windows.Data.Binding”的对象强制转换为类型 'System.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 =“{Binding TextDecorations,ElementName = txt_FanName}”部分,那么代码编译就好了。这是因为TextDecoration属性可以接受Null值,而其他(I.e。:FontWeight)不能接受吗?
我的问题是: 为什么会这样?是否有任何解决方法(除了在代码隐藏中手动设置它)?
答案 0 :(得分:3)
这似乎是Designer中的一个错误。在运行时绑定工作正常。然而,它在设计时是一个非常混乱的错误因为设计变得无用。
我找到的一个解决方法是创建一个“身份”转换器,这是一个简单地返回未修改的输入值的转换器: -
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;
}
}
在本地Resources节点中拥有其中一个并在绑定上使用它。例外并没有立即消失,但是运行应用程序并返回设计设计师似乎很高兴渲染,但绑定下的蓝色swiggly线仍然存在。
一旦您对整个Xaml的工作感到高兴,您就不需要进行进一步的设计,就可以删除这个kludge。
答案 1 :(得分:0)
我在我的Control的初始化代码(例如构造函数)中添加了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);