如何将绑定信息放入资源中

时间:2011-12-01 02:44:39

标签: wpf xaml data-binding resourcedictionary

我正在尝试在XAML中使用App.Config Properties.Settings。例如,我将GridMaxWidth的设置添加为500的int。然后在我的XAML中我添加了

<UserControl ...
    xmlns:Properties="clr-namespace:MyMainNamespace.Properties"
    ....>

<SomeControl 
    MaxWidth={Binding Source={x:Static Properties:Settings.Default},
                      Mode="OneWay,
                      Path=GridMaxWidth}">

这很好用。我的问题是:有没有办法减少视觉混乱,并将所有绑定源和模式信息放在资源字典中?我试过把&lt; binding&gt;资源文件中的属性,但xaml无法看到它。

1 个答案:

答案 0 :(得分:1)

大多数时候Bindings是为了好而不应该自定义创建的,所以在代码中创建绑定是安全的:

实施例


public class MaxWidthBidning: MultiBinding
{
   public MaxWidthBidning()
   {
      this.Bindings.Add(...)
      ...
   }
}

这种方法在处理带转换器的庞大MultiBindings时有很大帮助,将5 ++行XAML转换为一个。


<local:Control ComplexProperty={local:MaxWidthBidning} />

更新1 - 谈到减少“视觉混乱”一般我可以称之为我们使用的两种主要技术:

  1. 对于非密封对象,由XAML接受(注意,某些派生对象由于某种原因不能在XAML中使用(预期确切的类型匹配而不是对IsDervied的检查) - 所以总是先尝试一下。例如Bidning - 你可以创建一个从Binding中衍生出的类并硬连接这些东西(单独的MultiBinding路径和转换器),它不应该在XAML中修改。

  2. 对于密封对象,例如 - DoubleAnimationUsingKeyFrames - 您可以创建一个附加行为,类似'StreamlinedAnimation.Definition',并使用它在代码中创建笨重的部分。因此,您的动画将如下所示:


  3. <DoubleAnimationUsingKeyFrames local:StreamlinedAnimation.Definiton="Some Encoded information to be used for creating Frames" />