wpf visual studio designer不会加载用户控件

时间:2009-12-06 16:36:13

标签: wpf visual-studio

下面的视图是三个用户控件的容器,我在重构应用程序资源后开始收到此错误:

Error   295 Could not create an instance of type 'FilterPanel'. C:...\ProjectPickerWindow.xaml

以下是视图的xaml:

<Window x:Class="Smack.ConstructionAdmin.WpfPresentation.Views.ProjectPicker.ProjectPickerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local ="clr-namespace:Smack.ConstructionAdmin.WpfPresentation.Views.ProjectPicker"
xmlns:res="clr-namespace:Smack.ConstructionAdmin.WpfPresentation"
    Background="{DynamicResource {x:Static res:SmackResources.WaveWindowBackground}}"
    Title="{Binding Path=DisplayName}"  FontFamily="Arial" FontSize="12" 
    SizeToContent="WidthAndHeight" MinWidth="300"
    >

<DockPanel LastChildFill="True">
    <local:FilterPanel DockPanel.Dock="Top"  DataContext="{Binding}" Padding="3" />
    <local:StatusAndButtons DockPanel.Dock="Bottom" DataContext="{Binding}" Margin="3, 7" />
    <local:Listing DataContext="{Binding}"  Margin="3, 0"/>
</DockPanel>

应用程序运行良好,我可以撤消重构,但我不愿意。所有用户控件在其设计器窗口中都可以正常显示。

有人能告诉我如何让它在设计师中展示吗?

干杯,
Berryl

=== ADD'L INFO @ Andrew ===

很棒的一般清单,如果还没有修复的话 1)没有沉默的绑定错误
2)设计师在评论出FilterPanel后工作得很好! 3)没有明显的行为改变;所有测试都过去了 4)是的,我可能没有留下足够的面包屑来钉确切的重构,但主要的是:   - 将演示文稿的所有转换器放在自己的ResourceDic中   - 让FilterPanel引用generic.xaml,它包含所有mergedResourceDics。它引用了一个名为ListingStyles.xaml的特定Dic,它曾经有过转换器

顺便说一句,任何工具都可以帮助找到资源'问题'(Snoop,Mole?)?是否有类似FxCop的东西可以找到不良做法?

2 个答案:

答案 0 :(得分:1)

VS2K8设计人员无法处理大量有效的代码/ xaml。其中很多是Blend设计师可以处理的。

如果你的控制需要在被“使用”之前以特殊方式构建,那么VS就会爆炸。

一个VS2008问题是来自抽象类的控件。 herehere听起来像是在“重构”时可能发生的事情

答案 1 :(得分:1)

还没有答案,但有些建议因为没有足够的信息可以继续而不了解应用程序的更多信息:(作为答案发布,因为我认为评论的时间太长了。)

这些设计师唯一的问题是难以追查,因为根本原因往往与错误出现的地方无关。

这看起来好像FilterPanel依赖于尚不存在的对象。我经常发现这些是由于没有正确解析资源字典或者ValueConverter参数没有正确地转换为类型或在设计时初始化。

要尝试的事情 - 以速度的升序排列 1)运行应用程序并查看“输出”窗口以确保没有静默绑定错误。 2)缩小问题范围 - 如果您注释掉引用FilterPanel的行,设计师是否工作?通常,错误会在下一行中出现。 3)虽然应用程序似乎运行正常但是这引入了不同的行为? 4)退回重构,找出问题出现的点。

我发现Expression Blend更容忍但是当它失败时不一定更加冗长。

更新:

如果您还没有,可能需要将ThemeInfo自定义属性添加到自定义控件中,以便他们可以找到自己的资源 - 尽管我认为如果此机制不起作用,应用程序会抛出异常。无论如何声明是

[组件:ThemeInfo(   //主题特定资源,   //通用资源 )]