依赖属性的SetValue需要一个对象:如何设置FontSizeProperty?

问题描述:

问这个的另一种方式是说:依赖属性的SetValue需要一个对象:如何设置FontSizeProperty?

“如何设置的目的是24的价值,所以我可以把它作为参数传递给SetValue()value参数?”

要明确:我只是想设置一个依赖属性的值在后面的代码

这里是我的代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace Foo { 

    public partial class MainWindow : Window { 
    public MainWindow() { 
     InitializeComponent(); 

     TextBlock1.Text = "bar"; 

     TextBlock1.SetValue(FontSizeProperty, 24); 
    } 
    } 
} 

当我建立的应用程序,它成功了!

但是,当我调试,它抛出参数异常如下所示:

Argument Exception because my value is not an object

为什么我收到此错误和/或如何解决呢?

+0

为什么会有人downvote我的问题,然后至少没有礼貌留下评论? – ihodonald

+0

为什么不直接调用'TextBlock1.FontSize = 24;'? – Clemens

+0

@Clemens - 因为这是.NET代码。我想要XAML依赖项属性,因为它们给应用程序更多的功能。 – ihodonald

FontSize expects a double

就在你的价值的末尾添加” .0" 告诉编译器它应该是一个双:

TextBlock1.SetValue(FontSizeProperty, 24.0); 

你也可以用‘d’后缀:

TextBlock1.SetValue(FontSizeProperty, 24d); 

尽可能地,您应该使用强类型属性而不是依赖项属性。这样,您就可以使用隐式转换,只要有可能,类型错误将在编译时被捕获:

TextBlock1.FontSize = 24; 

幕后的属性将更新依赖项属性。因此,您可以获得完全相同的功能,但具有类型安全性。

+0

哈哈!哇!谢谢! – ihodonald

+1

@ihodonald你可能有一个很好的理由直接使用依赖项属性,但如果不是,那么最好直接分配属性'textBlock.FontSize'。它是强类型的,所以你会在编译时遇到这种错误 –

+1

@KevinGosse你应该在你的答案中提到。 – Clemens