У меня есть элемент управления 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-->
Теперь я использую этот элемент управления кнопкой выше, привязанный к свойству Content элементов управления ContentControl в 2 разных файлах Windows .xaml, где каждый 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 Windows имеют одинаковый экземпляр элемента управления кнопкой из ресурса, который используется как в Windows .
Как я могу решить эту проблему, чтобы каждое окно получало отдельный элемент управления кнопки от ресурса и по-прежнему отображало разные значения для свойства BoundText
из своих собственная ViewModel?
Изменить: по причине, указанной в MSDN
, как показано ниже, я не могу использовать атрибут x: Shared = "False" для решения этой проблемы:
• ResourceDictionary, содержащий элементы, не должен быть вложен в другой ResourceDictionary. Например, вы не можете использовать x: Shared для элементов в ResourceDictionary, который находится в Style, который уже является элементом ResourceDictionary.