我在资源字典中有一个 Button 控件作为资源,如下所示:
<!--ButtonResources.xaml file-->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button x:Key="buttonResource" Content={Binding BoundText}/>
</ResourceDictionary>
<!--ButtonResources.xaml file-->
我现在使用上面的按钮控件绑定到2 个不同的 Windows .xaml 文件中的 ContentControl 控件的Content 属性,每个文件都有自己的,因此每个窗口都应该根据每个窗口的属性值显示上面的按钮控件,如下所示。Window
DataContext
Content
ViewModel's
BoundText
<Window x:Class="TestClass1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ButtonResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl Content={StaticResource buttonResource}/>
</Grid>
</Window>
但是,问题在于两个窗口的 BoundText 属性显示相同的值,这意味着两个 WPF 窗口都具有来自资源的相同按钮控件实例,在两个窗口中都使用。
如何解决此问题,以便每个 Window 从资源中获取单独的按钮控件,并且仍然从它们自己的 ViewModel中显示不同的属性值?BoundText
编辑:
由于下面提到的原因MSDN
,我不能使用 x:Shared="False" 属性来解决这个问题:
• 包含项目的ResourceDictionary 不得嵌套在另一个ResourceDictionary 中。例如,对于已经是 ResourceDictionary 项的 Style 中的 ResourceDictionary 中的项,您不能使用 x:Shared。