ContentPresenter TextBlock.FontFamily绑定不起作用

时间:2019-05-16 14:33:07

标签: wpf xaml contentpresenter

我有一个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}"/>

哪个呈现:

enter image description here

TextBlock和ContentPresent都将其FontFamily绑定到TextFont。为什么在阿尔及利亚字体家族中也没有出现“居民”一词?

如果我将TextBlock.FontFamily="{Binding TextFont}"改成这样的硬线TextBlock.FontFamily="Algerian"我会得到

enter image description here

如何使它与绑定一起使用?

1 个答案:

答案 0 :(得分:1)

如果在运行时查看VS中的“输出”窗格,您会发现ContentPresenter上的绑定正在查看ContentPresenter的DataContext中的属性TextFontBindedTextColor,符合预期-但DataContext不是您所期望的。这是ContentPresenter的{​​{1}}属性。

ContentPresenter是一个非常专业的控件。你不要在这里。仅按指示在Content中使用它。对于此应用程序,请使用ControlTemplateContentControl

如果您设置的这些属性没有绑定,则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