如何在WPF中的单独ResourceDictionary中引用资源?

时间:2012-08-14 17:11:27

标签: wpf xaml

在我的项目(ABC)中,我有MainWindow.xaml,我为它定义了一个工具栏,这个工具栏是在 资源/视图/ ApplicationToolbar.xmal下的项目如下:

         

我已在我的MainWindow.xaml中将其作为xmlns:local="clr-namespace:ABC"引用,并且一旦我运行它,我得到一个 指示未找到View123的错误。

更多信息:(编辑)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:ABC">

    <StackPanel x:Key="View1">
        <Button Margin="3" Content="Test1"></Button>
        <Button Margin="3" Content="Test2"></Button>
    </StackPanel>

</ResourceDictionary>

现在在MainWindow.xmal中有:

<Window x:Class="ABC.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ABC"
        Title="MainWindow" Height="350" Width="525">
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="10"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="10"/>
        </Grid.RowDefinitions>

        <!-- FOLLOWING LINE CAUSING ERROR-->
        <ContentControl Name="Toolbar" Content="{StaticResource View1 }"></ContentControl>

    </Grid>
</Window>

我错过了什么?

谢谢, 阿米特

2 个答案:

答案 0 :(得分:4)

由于View1在单独的ResourceDictionary中被引用,您需要将其合并到此ResourceDictionary的{​​{1}}。

尝试将此添加到Window声明中的代码:

Window

此时,<Window.Resources> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Resource/Views/ApplicationToolbar.xaml"/> </ResourceDictionary.MergedDictionaries> </Window.Resources> 应该能够引用Window

注意:我没有在IDE中对此进行全面测试,因此可能会出现轻微的语法错误或路径问题。您可能必须使用Pack URI格式化字典网址,以便正确解析引用。 WPF中的资源路径往往有点棘手。

答案 1 :(得分:0)

感谢所有人。好的,我尝试了这里建议的东西,我很欣赏迈克,它接近解决方案。对我有用的是在 App.xaml 中添加以下标记:

<Application.Resources>
    <ResourceDictionary Source="Resources/views/ApplicationToolbar.xaml"/>
</Application.Resources>

感谢。 阿米特