我需要在新的应用程序中嵌入一个现有的应用程序。我认为这很容易,所以我设置了原始应用程序的所有内容在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中定义的。我可以检查它并且矩形正在解决它:
如果我删除了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设置样式,但它并没有这样做,它只是使用默认主题:
然而在我的“测试”项目中,Theme.xaml应用得很好:
所以我的结论是:
<ResourceDictionary Source="/App;component/GUI/Themes/Theme.xaml" />
对于外部引用的项目不正确。我试过了:
<ResourceDictionary Source="pack://application:,,,/App;component/GUI/Themes/Theme.xaml" />
但是有类似的失败。它肯定是找到了它,如果我拼错并说放“Theme2.xaml”它会出现错误。但由于某种原因,它没有被正确应用。
Edit2 我已将问题跟踪到用户控件之间如何引用资源。我决定创建一个专注于手头实际问题的新问题: