Элементы управления WPF как StaticResource в словаре ресурсов, используемые в нескольких окнах WPF?



У меня есть кнопка управления в качестве ресурса в словаре ресурсов, как показано ниже:



<!--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-->


Теперь я использую эту кнопку control , привязанную к свойству Content ContentControl contentsв 2 разных окнах.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 имеют то же самое экземпляр кнопки управления из ресурса, используемый в обоих окнах.



Как я могу решить эту проблему таким образом, что каждое окно получает отдельный элемент управления от ресурса и все еще отображает разные значения для свойства BoundText из их собственного ViewModel ?



Редактировать:
По причине, упомянутой в MSDN, как показано ниже, я не могу использовать X: Shared="False" атрибут для разрешения этого:




•ResourceDictionary, содержащий элементы, не должен быть вложенным
в рамках другого ресурсного проекта. Например, вы не можете использовать
x: общие для элементов в ResourceDictionary, который находится в пределах стиля, который
это уже элемент ResourceDictionary.


681   2  

2 ответов:

Вы пытались использовать атрибут x:Shared?

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Button x:Shared="False" x:Key="buttonResource" Content={Binding BoundText}/>
</ResourceDictionary>

Для получения дополнительной информации прочитайте здесь.

В случае, если это не работает, вы можете сохранить шаблон в вашем ресурсе, а не кнопку и использовать ContentControl внутри вашего окна, чтобы отобразить его.

Попробуйте:

<Style TargetType="Button" x:Key="buttonResource">
    <Setter Property="Content" Value="{Binding BoundText}" />
</Style>

<Button Style="{StaticResource buttonResource}" />

Comments

    Ничего не найдено.