【问题标题】:How to put binding information into a Resource如何将绑定信息放入资源
【发布时间】:2011-12-01 02:44:39
【问题描述】:

我正在尝试在 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}">

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

【问题讨论】:

    标签: wpf xaml data-binding resourcedictionary


    【解决方案1】:

    大多数情况下,绑定是永久创建的,不应自定义,因此在代码中创建绑定是安全的:

    例子


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

    在使用转换器处理庞大的 MultiBinding 时,该方法非常有用,可以将 5++ 行 XAML 合二为一。


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

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

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

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多