将依赖项属性用于全局属性

时间:2011-05-02 00:39:01

标签: c# wpf

我是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是一个框架,可以帮助您实现真正好看的应用程序(它还包括打印等)。您想要做什么?它应该是Visual Tree的一部分吗?

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

简单地说,我希望所有UI都能以某种方式继承单个配置(字体和颜色)。并且该配置可以由用户更改和查看。

3 个答案:

答案 0 :(得分:0)

  

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

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

查看它实现DependecyObject

的继承层次结构
  

我的第二次尝试是在顶部窗口中注册依赖项,因此整个可视化树都可以访问它。我抛出了异常,我唯一能做的就是窗口没有实现DependencyObject。

什么样的例外?你想做什么?你能粘贴一些代码吗?

  

所以现在我不知所措。我正在尝试甚至可能吗?这个项目的全部目的是帮助我学习wpf,现在我想知道是否应该降低我对用wpf完成的工作的期望。

WPF是一个框架,可以帮助您实现真正好看的应用程序(它还包括打印等)。您想要做什么?它应该是Visual Tree的一部分吗?

答案 1 :(得分:0)

我们无法解决学习全新框架和设计整个计划的重大任务。这需要时间。它可能令人生畏,但坚持下去。

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

UIPropertyMetadata(0)

实际上是为依赖项属性提供默认值,该值必须与第Register个参数中指定的类型匹配。由于0是一个整数,并且您的属性是Color,因此依赖项属性子系统会抛出异常。相反,您可以使用:

UIPropertyMetadata(new Color())

或任何其他颜色作为默认颜色。

答案 2 :(得分:0)

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

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

为了设计时属性编辑而这样做,您可以了解有关DP及其使用原因的更多信息。事实上,有些人更喜欢它们,因为它们并不难以编码。

使用" Generic"创建自定义控件时也会使用DP。文件夹方法。这就是Microsoft自己创建所有控件的方式。

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

DP使用元数据,PropertyChanged回调,默认值和Cohersion以及其他技术实现最大程度的控制,使您可以100%控制它们包含的内容。 DP是物业控制的终极。

继续搜索互联网,因为有很多关于该主题的文章。

相关问题