【问题标题】:SetValue for Dependency Property requires an object: How do I set the FontSizeProperty?依赖属性的 SetValue 需要一个对象:如何设置 FontSizeProperty?
【发布时间】:2017-07-01 11:06:24
【问题描述】:

问这个问题的另一种方式是说:

“如何将对象的值设置为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);
    }
  }
}

当我构建应用程序时,它成功了!

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

为什么会出现此错误和/或如何解决?

【问题讨论】:

  • 为什么有人会否决我的问题,然后至少没有礼貌发表评论?
  • 你为什么不直接打电话给TextBlock1.FontSize = 24;
  • @Clemens - 因为那是 .NET 代码。我想要 XAML 依赖属性,因为它们为应用程序提供了更多功能。
  • 这毫无意义。 FontSize 是 FontSize 依赖属性的 CLR 包装器。它的 setter 直接调用SetValue(FontSizeProperty, value)。因此,使用TextBlock1.FontSize = 24,您可以直接设置依赖属性。
  • @Clemens - 我不知道。我只是按照我被告知的去做。 :D 此信息是截至 2016 年 10 月的最新信息。

标签: c# wpf xaml dependency-properties


【解决方案1】:

FontSize expects a double.

只需在值的末尾添加“.0”即可告诉编译器它应该是双精度数:

TextBlock1.SetValue(FontSizeProperty, 24.0);

也可以使用“d”后缀:

TextBlock1.SetValue(FontSizeProperty, 24d);

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

TextBlock1.FontSize = 24;

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

【讨论】:

  • 哈哈!哇!谢谢!
  • @ihodonald 你可能有充分的理由直接使用依赖属性,但如果没有,那么最好直接分配属性textBlock.FontSize。它是强类型的,所以你会在编译时发现这种错误
  • @KevinGosse 你应该在回答中提到这一点。
  • @Kevin_Gosse 此代码来自a course on Lynda.com。显然,使用依赖属性可以实现数据绑定、XAML 样式、情节提要的动画以及控件模板的使用(我还不了解模板,但我即将学习如何使用它们)。
  • @ihodonald FontSize 属性(就像 UI 控件上的大多数属性一样)只是依赖属性的一个包装器:referencesource.microsoft.com/#PresentationFramework/Framework/… 所以通过使用它,您可以获得相同的功能,但添加了类型安全。
猜你喜欢
  • 2020-11-13
  • 2014-08-14
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多