【问题标题】:Error Cannot create an Instance of "ObjectName" in Designer when using <UserControl.Resources>使用 <UserControl.Resources> 时,无法在 Designer 中创建“ObjectName”实例
【发布时间】:2011-03-01 19:04:18
【问题描述】:

我正在尝试将组合框项目源绑定到静态资源。我过度简化了我的例子,以便很容易理解我在做什么。

所以我创建了一个类

public class A : ObservableCollection<string>
{
  public A()
  {
     IKBDomainContext Context = new IKBDomainContext();
        Context.Load(Context.GetIBOptionsQuery("2C6C1Q"), p =>
        {
            foreach (var item in SkinContext.IKBOptions)
            {
                this.Add(item);
            }
        }, null);
  }
}

因此,该类有一个构造函数,该构造函数使用从持久数据库获取数据的域上下文来填充自身。我只是在这个列表上做阅读,所以不必担心坚持回来。

在 xaml 中,我添加对此类命名空间的引用,然后将其作为 usercontrol.resources 添加到页面控件中。

<UserControl.Resources>
    <This:A x:Key="A"/>
</UserControl.Resources>

然后我使用它这个静态资源将它绑定到我的组合框项目源。实际上我必须使用数据模板来正确显示这个对象,但我不会在这里添加。

<Combobox ItemsSource="{StaticResource A}"/>

现在当我在设计器中时,我得到了错误:

无法创建“A”的实例。

如果我编译并运行代码,它运行得很好。这似乎只影响 xaml 页面的编辑。

我做错了什么?

【问题讨论】:

    标签: silverlight data-binding silverlight-4.0


    【解决方案1】:

    在设计器中运行时,完整的应用程序运行时不可用。然而,设计者不只是神奇地知道如何模拟 UserControl 的 UI。它的 Xaml 被解析并且在那里描述的对象被实例化。

    由您来编写类以应对设计器中的存在。您可以使用静态属性DesignerProperties.IsInDesignTool 来确定您的代码当前是否正在设计器工具中使用。

    如果在设计人员中您可以交付一组测试数据,而不是尝试访问数据服务。

    【讨论】:

    • 谢谢!我以为这就是问题所在!谢谢。
    【解决方案2】:

    我的问题和上面描述的一样,我也使用了 DesignerProperties.IsInDesignTool

    但我无法在 Visual Studio 中打开用户控件用于设计目的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-21
      • 2021-07-30
      • 2020-07-17
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      相关资源
      最近更新 更多