我有一个ContentPresenter,想通过将每个项目绑定到FontFamily来使用不同的字体呈现它,但是它不起作用。怪异的部分是对TextBlock的绑定有效,但对于ContentPresenter却不有效?这是我的xaml
<ContentPresenter
Width="100"
Content="{Binding Name}"
TextBlock.FontFamily="{Binding TextFont}"
TextBlock.Foreground="{Binding BindedTextColor}"/>
<TextBlock
Text="{Binding FontName}"
FontFamily="{Binding TextFont}"
Foreground="{Binding BindedTextColor}"/>
哪个呈现:
TextBlock和ContentPresent都将其FontFamily绑定到TextFont。为什么在阿尔及利亚字体家族中也没有出现“居民”一词?
如果我将TextBlock.FontFamily="{Binding TextFont}"
改成这样的硬线TextBlock.FontFamily="Algerian"
我会得到
如何使它与绑定一起使用?
答案 0 :(得分:1)
如果在运行时查看VS中的“输出”窗格,您会发现ContentPresenter上的绑定正在查看ContentPresenter的DataContext
中的属性TextFont
和BindedTextColor
,符合预期-但DataContext
不是您所期望的。这是ContentPresenter
的{{1}}属性。
ContentPresenter
是一个非常专业的控件。你不要在这里。仅按指示在Content
中使用它。对于此应用程序,请使用ControlTemplate
或ContentControl
。
如果您设置的这些属性没有绑定,则DataContext不会成为问题,您将获得期望的结果。
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ String”(HashCode = 966822854)上找不到“ TextFont”属性。 BindingExpression:Path = TextFont; DataItem ='字符串'(HashCode = 966822854);目标元素是'ContentPresenter'(Name ='');目标属性为“ FontFamily”(类型为“ FontFamily”)
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ String”(HashCode = 966822854)上找不到“ BindedTextColor”属性。 BindingExpression:Path = BindedTextColor; DataItem ='字符串'(HashCode = 966822854);目标元素是'ContentPresenter'(Name ='');目标属性为“前景”(类型为“画笔”)
每当绑定发生明显错误时,请在输出窗格中查找错误。如果您不能立即解决问题,请添加跟踪,然后在输出窗格中会获得大量调试信息:
Label