【发布时间】:2013-12-15 21:40:59
【问题描述】:
我有以下资源字典
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:SharedHelpers="clr-namespace:Shared.Helpers;assembly=Shared"
xmlns:SharedViewModels ="clr-namespace:Shared.ViewModels;assembly=Shared"
xmlns:SharedViews="clr-namespace:Shared.Views;assembly=Shared"
>
<DataTemplate DataType="{x:Type SharedViewModels:DatabaseViewModel}">
<SharedViews:DatabaseView/>
</DataTemplate>
<DataTemplate DataType="{x:Type SharedViewModels:ProxyViewModel}">
<SharedViews:ProxiesView/>
</DataTemplate>
<DataTemplate DataType="{x:Type SharedViewModels:AppUserViewModel}">
<SharedViews:AppUserView/>
</DataTemplate>
<!--ViewModels-->
<SharedViewModels:DatabaseViewModel x:Key="DatabaseViewModel"/>
<SharedViewModels:AppUserViewModel x:Key="AppUserViewModel"/>
<SharedViewModels:ProxyViewModel x:Key="ProxyViewModel"/>
</ResourceDictionary>
您可以看到这些资源是静态的,我想从我的其他库和类中访问它们 所以我所做的是在我的 App.xaml 中我确实将字典定义如下
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="dict" Source="ResourceDict.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
从我后面的代码中我需要访问这个字典中的实例而不必重新定义它,所以我找到了
var databaseViewModelInstance = Application.Current.Resources.MergedDictionaries["dict"]["DatabaseViewModel"] as Shared.ViewModels.DatabaseViewModel;
但问题是它只允许我通过索引而不是它的名称访问字典,我如何通过它的名称访问字典而不必在我想要访问它的每个类中定义一个新的资源字典实例来自?
下面的工作就好了
var databaseViewModelInstance = Application.Current.Resources.MergedDictionaries[0]["DatabaseViewModel"] as Shared.ViewModels.DatabaseViewModel;
【问题讨论】:
标签: c# .net wpf xaml resourcedictionary