找不到具有名称/密钥的资源

时间:2010-09-15 16:00:39

标签: c# silverlight-4.0 silverlight-toolkit

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

当我尝试实例化UserControl时,它会抛出一个异常,因为在UserControl的XAML中它使用了Style定义的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>

3 个答案:

答案 0 :(得分: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应用程序,这很好用。编写完代码后,我能够测试我的模板选择器,DataTemplate选择器等等。代码隐藏中使用的所有代码都调用

Application.Current.FindResource()

效果很好。

答案 1 :(得分:0)

您不能轻易地将用户控件单元测试脱离上下文。依赖性太多。

您可以使用单元测试(无论如何应该是所有代码的位置)测试您的视图模型,并使用某种形式的GUI自动化(或者如果您无法负担最新的GUI测试工具的人类)来控制Silverlight控件。 / p>

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

答案 2 :(得分:0)

瑞克,

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

当然,它绝不是复制“任何东西”的最佳解决方案,但是,嘿,我真的不关心风格。另外,您甚至可以为UI测试面板定义自己的样式。

HTH

托马斯