对全局属性使用依赖属性

本文关键字:属性 依赖 全局 | 更新日期: 2023-09-27 17:54:40

我是WPF新手。我读了很多关于WPF和依赖属性的文章。我对依赖属性的理解是将属性绑定到XAML (XAML是目标)。我设想了一个程序,其中一个配置窗口将控制程序其余部分的所有视觉元素(字体,字体大小,颜色等)。

在我的第一次尝试中,我创建了一个单独的窗口,其中包含所有不同的配置选项。这失败了,因为我无法弄清楚如何在单独的XAML文件中使用依赖属性。

同样,依赖属性只能在直接或间接实现了dependdecyobject类的类中注册。我如何知道哪些wpf对象实现了它?看来窗户没有,但我可能错了。我的第二次尝试是这样的,在顶部窗口中注册依赖项,这样整个可视树都可以访问它。我有异常被抛出,我唯一能想到的是,窗口没有实现到DependencyObject。(我可能搞错了,视觉树对我来说仍然是一个谜。我正在学习

所以我现在很茫然。我所尝试的是可能的吗?这个项目的全部目的是帮助我学习WPF,现在我想知道我是否应该降低我对WPF的期望。

编辑:

什么类型的异常?你想干什么?你能粘贴一些代码吗?

public partial class MainWindow : Window {
public Color BackColor {
   get { return (Color)GetValue(BackColorProperty); }
   set { SetValue(BackColorProperty, value); }
}
public static readonly DependencyProperty BackColorProperty =
   DependencyProperty.Register("BackColor",typeof(Color),typeof(MainWindow),
       new UIPropertyMetadata(0));

似乎是Color引起了异常。我将其更改为int,没有抛出异常。那么,原始类型是否只能注册?

WPF是一个框架,帮助你建立真正好看的应用程序(它也包括打印等)你想做什么?它应该是Visual Tree的一部分吗?

再次强调,这个项目只是为了让我学习WPF。我的想法是创建一个包含不同页面的主UI。配置按钮会弹出一个窗口,其中包含更改字体、字体大小、背景颜色等选项。当用户进行更改时,这些更改将应用于主UI。我的问题是,我如何在注册它们的配置类之外访问这些依赖项属性?我如何有一个窗口,可以有滑块和组合框,和任何其他类可以访问这些配置设置?

简单地说,我希望一个单一的配置(字体和颜色)以某种方式被所有的ui继承。这个配置可以被用户改变和看到。

对全局属性使用依赖属性

同样,依赖属性只能在直接或间接实现了dependdecyobject类的类中注册。我如何知道哪些wpf对象实现了它?看来窗口没有,但我可能错了。

http://msdn.microsoft.com/en-us/library/system.windows.window.aspx

看看继承层次它确实实现了dependdecyobject

我的第二次尝试是这样的,在顶部窗口中注册依赖项,这样整个可视树都可以访问它。我有异常被抛出,我唯一能想到的是,窗口没有实现到DependencyObject。

什么类型的异常?你想干什么?你能粘贴一些代码吗?

所以我现在很茫然。我所尝试的是可能的吗?这个项目的全部目的是帮助我学习wpf,现在我想知道我是否应该降低我对wpf的期望。

WPF是一个框架,帮助你建立真正好看的应用程序(它也包括打印等)你想做什么?它应该是Visual Tree的一部分吗?

我们不能在这里处理学习一个全新框架和设计整个程序的大任务。这需要时间。这可能会让人望而生畏,但要坚持下去。

至于你的例外,问题是神秘的:

UIPropertyMetadata(0)

实际上提供了依赖属性的默认值,该值必须与Register的第二个参数中指定的类型匹配。因为0是一个整数,你的属性是一个Color,依赖属性子系统抛出一个异常。你可以使用:

UIPropertyMetadata(new Color())

依赖属性是专门为WPF创建的新设计。它们解决的问题之一是创建更快的属性值解析,因为它们不使用旧的、较慢的技术(详细了解创建它们的原因)。

它们一开始很难理解,因为当支持名为INotifyPropertyChanged的接口时,并不完全清楚为什么需要它们。但是一个主要的原因是,如果你正确地实现了DependencyProperty,你将能够在属性窗口中更改该属性的设计时属性值!这是一件很酷的事情因为你可以很容易地通过这种方式设置所有默认属性。

这样做是为了设计时的属性编辑,可以让你了解更多关于dp的知识,以及为什么要使用它们。事实上,有些人更喜欢到处使用它们,因为它们并不难编写。

DPs也用于使用"Generic"文件夹方法创建自定义控件。这就是微软自己创建所有控件的方式。

在使用它们时需要注意一些注意事项。在特定控件被其他控件包含之前,您无法看到dp的设计时属性。换句话说,带有DPs的UserControl不会在UserControl设计中显示这些DPs。他们会;但是,显示在包含该用户控件的控件中。

DPs使用元数据、PropertyChanged回调、默认值、coherence和其他技术带来最大的控制,这些技术使您可以100%控制它们所包含的内容。DP是最终的属性控制。

继续在网上搜索,因为有很多关于这个话题的文章。