我是新来的WPF。我读了很多关于WPF和依赖性属性的文章。我对依赖性属性的理解是将属性绑定到XAML (XAML是目标)。我设想了一个程序,其中一个配置窗口将控制程序其余部分的所有可视元素(字体、字体大小、颜色等)。
在第一次尝试中,我创建了一个单独的窗口,该窗口将包含所有不同的配置选项。这失败是因为我无法弄清楚如何在单独的XAML文件中使用依赖项属性。
此外,依赖项属性只能在直接或间接实现DependecyObject类的类中注册。我如何知道哪个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是一个框架,可以帮助您创建非常好看的应用程序(还包括打印等)。你想做什么?它应该是视觉树的一部分吗?
再说一遍,这个项目只是为了让我学习WPF。我的想法是创建一个具有不同页面的主UI。配置按钮将弹出一个窗口,其中包含更改字体、字体大小、背景色等选项。当用户进行更改时,这些更改将应用于主UI中。我的问题是如何访问注册配置类之外的这些依赖项属性?我如何有一个窗口可以有滑块和组合框,而任何其他类都可以访问这些配置设置?
简单地说,我希望单个配置(字体和颜色)以某种方式被所有UI继承。该配置可以被用户更改和查看。
发布于 2011-05-02 00:54:46
此外,依赖项属性只能在直接或不直接实现
类的类中注册。我如何知道哪个wpf对象实现了它?看来窗户没有,但我可能错了。
http://msdn.microsoft.com/en-us/library/system.windows.window.aspx
查看它确实实现了DependecyObject的继承层次结构。
我的第二次尝试是在顶部窗口注册依赖项,这样整个可视化树就可以访问它。我有异常被抛出,我唯一能做的就是窗口没有实现到DependencyObject。
什么样的例外?你想做什么?你能粘贴一些代码吗?
,所以我现在不知所措。我所尝试的是否可能?这个项目的全部目的是帮助我学习wpf,现在我想知道我是否应该降低对wpf所能完成的任务的期望。
WPF是一个框架,可以帮助您编写非常好看的应用程序(还包括打印等)。你想做什么?它应该是视觉树的一部分吗?
发布于 2011-05-02 03:40:48
我们不能在这里解决学习一个全新的框架和设计你的整个程序的重大任务。这需要时间。它可能令人望而生畏,但要坚持下去。
至于你的例外,问题是神秘的:
UIPropertyMetadata(0)实际上是为依赖项属性提供默认值,该值必须与Register的第二个参数中指定的类型相匹配。由于0是一个整数,而您的属性是一个Color,所以依赖属性子系统会抛出一个异常。相反,您可以使用:
UIPropertyMetadata(new Color())或任何其他颜色作为默认值。
发布于 2015-03-26 04:22:16
依赖项属性是专门为WPF创建的新设计。他们解决的问题之一是创建更快的属性值解析,因为它们不使用更老、更慢的技术(请阅读创建它们的原因)。
一开始它们很难理解,因为当支持名为INotifyPropertyChanged的接口时,不太清楚为什么需要它们。但是,其中一个主要原因是,如果您正确地实现了一个DependencyProperty,您将能够在属性窗口中更改该属性的设计时属性值!现在,这是一件非常酷的事情,因为您可以非常容易地以这种方式设置所有默认属性。
这样做是为了设计时间,属性编辑可以让您了解更多关于DPs以及为什么使用DPs的知识。事实上,有些人在任何地方都喜欢它们,因为它们并不难编码。
在使用“泛型”文件夹方法创建自定义控件时,也使用DPs。这就是微软自己创建所有控件的方式。
在使用它们时要注意一些注意事项。在特定控件被其他控件包含之前,您无法看到DPs的设计时属性。换句话说,带有DPs的UserControl将不会在UserControl设计中显示那些Dps。但是,它们会出现在包含该用户控件的控件中。
DPs使用元数据、PropertyChanged回调、默认值、Cohersion和其他技术实现最大限度的控制,这些技术使您能够100%地控制它们包含的内容。在财产控制方面,DP是终极的。
继续浏览互联网,因为有很多关于这个话题的文章。
https://stackoverflow.com/questions/5852486
复制相似问题