【发布时间】:2013-02-13 08:50:54
【问题描述】:
我在资源字典中有一个 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 和因此,每个窗口应根据每个窗口的ViewModel's BoundText 属性值显示上述按钮控件的Content,如下所示。
<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 窗口都有 same 来自资源的按钮控件实例,用于两个窗口。
我怎样才能解决这个问题,以便每个窗口从资源中获得一个单独的按钮控件,并且仍然显示@的不同值987654328@ 来自他们自己的 ViewModel 的属性?
编辑:
由于MSDN 中提到的原因如下,我不能使用 x:Shared="False" 属性来解决这个问题:
•包含项目的 ResourceDictionary 不得嵌套 在另一个资源字典中。例如,您不能使用 x:Shared 用于样式中的 ResourceDictionary 中的项目 已经是 ResourceDictionary 项。
【问题讨论】:
标签: wpf xaml .net-4.0 resourcedictionary staticresource