【问题标题】:Cannot find a Resource with the Name/Key找不到具有名称/键的资源
【发布时间】:2010-09-15 16:00:38
【问题描述】:

我正在尝试使用 Silverlight 4 Toolkit 对用户界面进行单元测试。

当我尝试实例化 UserControl 时,它会引发异常,因为在 UserControl 的 XAML 中,它使用的是样式定义的 App.xaml。

在我实例化 UserControl 之前,有没有办法以某种方式加载资源?我是不是走错路了?

这是单元测试代码:

        [TestMethod]
    public void ExerciseTimePeriodUserInterface()
    {
        CustomUserControls.TimePeriodFilter timePeriodFilter = new CustomUserControls.TimePeriodFilter();
    }

这是对 UserControl 中样式的引用:

<Border Style="{StaticResource FilterBorderWrapper}">

最后,这是 App.xaml 中定义的样式:

    <Style TargetType="Border" x:Key="FilterBorderWrapper">
        <Setter Property="Background" Value="#F1F5FB" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="BorderBrush" Value="#CBD9E9" />
        <Setter Property="CornerRadius" Value="2" />
        <Setter Property="Margin" Value="2" />
    </Style>

【问题讨论】:

    标签: c# silverlight-4.0 silverlight-toolkit


    【解决方案1】:

    如果您的所有资源都放入 ResorceDictionaries。您可以简单地创建 Application 实例并将该 Dictionary 添加到资源中。请看样例:

    Application _app = new Application();
    ResourceDictionary dictionary = new ResourceDictionary();
    dictionary.Source = new Uri("pack://application:,,,/Gui.Mvvm;component/Themes/YourResourceDictionary.xaml");
    _app.Resources.MergedDictionaries.Add(dictionary);
    

    对于我的 WPF 应用程序,这可以正常工作。编写此代码后,我能够测试我的模板选择器、数据模板选择器等。在代码隐藏调用中使用的所有代码

    Application.Current.FindResource()
    

    效果很好。

    【讨论】:

      【解决方案2】:

      您不能轻松地脱离上下文对用户控件进行单元测试。依赖项太多。

      您可以使用单元测试(无论如何都应该是您的所有代码所在的位置)和 Silverlight 控件以及某种形式的 GUI 自动化测试您的视图模型(或者如果您买不起最新的 GUI 测试工具,则可以人工测试)。

      正如 VC 74 所暗示的,如果您还没有使用 MVVM,您可能应该(如果您想进行 Silverlight 单元测试)。

      【讨论】:

      • 如果我做不到,那也没关系。正如我对 VC 74 所说,我已经在测试 ViewModel,但是我遇到了一些与 UI 相关的奇怪错误,并且正在寻找一种方法来执行该逻辑。
      【解决方案3】:

      瑞克,

      基本上,我遇到了同样的错误。后来,我简单地将资源和所有定义复制到了 Test-Projects App.xaml 文件(我也有一个 Styles.xaml 资源),我的 UI 测试工作没有问题。

      当然,复制“任何东西”从来都不是最好的解决方案,但是,嘿,我真的不在乎样式。此外,您甚至可以为 UI 测试面板定义自己的样式。

      HTH

      托马斯

      【讨论】:

        猜你喜欢
        • 2018-01-05
        • 2012-10-31
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        • 2017-07-19
        • 1970-01-01
        相关资源
        最近更新 更多