将字体族属性绑定到视图模型的属性

6

我希望将一个文本框的字体族系(FontFamily)绑定到我在ViewModel上创建的属性。

这是我的XAML代码:

<TextBox Text="Test Font Binding" FontFamily="{Binding FontFirstContent}" />

这是我的ViewModel中的属性:

public FontFamily FontFirstContent
{
    get { return new FontFamily("Verdana"); }
}

当视图加载时,属性的getter函数正确地触发,但它没有传递到视图中。我的视图上所有的绑定都有效,除了这一个,所以我不明白出了什么问题?
编辑: 好的,现在它正常工作了!我只是在错误的FontFamily对象上工作...我使用的是:
System.Drawing.FontFamily

但是 FontFamily 必须是以下类型:
System.Windows.Media.FontFamily

1
很奇怪,我设置了一个快速项目。它对我有效。您是否正确设置了DataContext? - Mike Schwartz
1
你能把你的viewmodel、xaml和view code behind(如果有的话)的代码粘贴过来吗? - Mike Schwartz
如果我不使用ViewModel,似乎对我也起作用。因此,如果我将我的属性放在视图的代码后面,并定义:DataContext = this;它就可以工作。但是,如果我这样做:DataContext = new MyViewModel();它就无法工作。非常奇怪。 - Nidx
我所做的是在视图代码后台中设置DataContext = new MyViewModel();,这样就可以了。 - Mike Schwartz
根据Snoop等工具,FontFamily在视图中具有什么实际价值? - O. R. Mapper
哦哦哦..好的问题解决了!我原本使用的是:System.Drawing.FontFamily,而不是 System.Windows.Media.FontFamily。非常抱歉,谢谢你们的回复! - Nidx
1个回答

1

以下是我添加到ResourceDictionary中的内容,旨在成为我的应用程序的默认样式:

<FontFamily x:Key="MyFontFamily">Segoe UI</FontFamily>

当您想要使用它时,您可以像这样设置FontFamily属性:

<Label Content="Something" FontFamily="{DynamicResource MyFontFamily}"/>

不要忘记将其放置在ResourceDictionary或任何控件资源中。
希望对您有所帮助;

我知道如何在ResourceDictionary中使用样式,但在我的情况下,当用户执行某些操作时,我必须动态更改FontFamily。我粘贴的代码不是我真正使用的代码。我对我的getter进行了一些其他测试。这就是为什么我在我的ViewModel中放置一个属性的原因。谢谢。 - Nidx
您可以使用 FindResource 方法动态更改它。这正是我所做的。我有4个 FontFamily,我会动态更改它们。 - trinaldi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接