将一个WPF应用程序嵌入另一个 - 资源文件无效

时间:2016-09-08 11:20:54

标签: wpf xaml

我需要在新的应用程序中嵌入一个现有的应用程序。我认为这很容易,所以我设置了原始应用程序的所有内容在UserControl“EmbeddedApp”中,主题应用于它的资源:

<UserControl x:Class="App.GUI.Window.EmbeddedApp"
             ...>
    <UserControl.Resources>
        <ResourceDictionary Source="/App;component/GUI/Themes/Theme.xaml" />
    </UserControl.Resources>
    ...all the app stuff...
</UserControl>

这个独立应用程序的窗口就像这样:

<Controls:MetroWindow x:Class="App.MainWindow"
                      ...>
    <Window:EmbeddedApp/>
</Controls:MetroWindow>

很好,很容易。我在该项目的测试应用程序中测试了“嵌入”功能,它运行正常。

但是,当我将其嵌入到像这样的“完整”应用程序中时,我遇到了资源问题。有一个例外“异常:找不到名为'AccentSelectedColorBrush'的资源。资源名称区分大小写。”在线:

<Rectangle Name ="container" Grid.Row="0"  Height="50"  Fill="Black" Stroke="{StaticResource AccentSelectedColorBrush}"/>

在嵌入式应用程序的深处。如果在Theme.xaml中的静态资源中定义,这怎么可能发生?为什么它会在“空”应用程序中正常工作?

我尝试手动添加主题:

                                              

现在,在这里找到矩形的AccentSelectedColorBrush。但是,我仍然在EmbeddedApp中找不到错误AccentSelectedColorBrush,它也是White - 这不是在Theme.xaml中定义的。我可以检查它并且矩形正在解决它:

enter image description here

如果我删除了Theme.xaml,则找不到AccentSelectedColorBrush。

修改:我现在有了这个:

<UserControl x:Class="MyNewApp.Pages.Views.EmbeddedAppView"
             InheritanceBehavior="SkipAllNow"
             ...>
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/App;component/GUI/Themes/Theme.xaml" />
                <!--<ResourceDictionary Source="pack://application:,,,/App;component/GUI/Themes/Theme2.xaml" />-->
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
    <StackPanel Height="447" Width="539">
        <Rectangle Width="100"  Height="100" Fill="{StaticResource AccentSelectedColorBrush}"/>
        <!--<App:EmbeddedApp Width="300"  Height="300"/>-->
        <Label Content="Texty Text"/>
        <TextBox Text="Some Text"/>
        <CheckBox IsChecked="True" Content="Test"/>
    </StackPanel>
</UserControl>

现在,我希望标签和TextBox可以根据Theme.xaml设置样式,但它并没有这样做,它只是使用默认主题:

enter image description here

然而在我的“测试”项目中,Theme.xaml应用得很好:

enter image description here

所以我的结论是:

<ResourceDictionary Source="/App;component/GUI/Themes/Theme.xaml" />

对于外部引用的项目不正确。我试过了:

<ResourceDictionary Source="pack://application:,,,/App;component/GUI/Themes/Theme.xaml" />

但是有类似的失败。它肯定是找到了它,如果我拼错并说放“Theme2.xaml”它会出现错误。但由于某种原因,它没有被正确应用。

Edit2 我已将问题跟踪到用户控件之间如何引用资源。我决定创建一个专注于手头实际问题的新问题:

"Sub" UserControl cannot find resource - how to get resources to "flow" down the visual tree (without placing it in App resources)

0 个答案:

没有答案