2013-02-13 3 views
7

У меня есть элемент управления Button в качестве ресурса в Resource Dictionary как показано ниже:WPF-элементы управления как StaticResource в словаре ресурсов, используемые в нескольких Windows 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--> 
управления

я теперь использовать эту кнопку выше связанного содержимого собственности ContentControl управления в 2 различных ОС Windows .xaml файлы, где каждый Window имеет свой собственный DataContext, и поэтому каждое окно должно отображать Content приведенного выше элемента управления кнопки на основании его значения ViewModel'sBoundText, как показано ниже для каждого окна.

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

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

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

ответ

8

Пробовали ли вы использовать атрибут 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> 

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

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

+0

Спасибо.Но я не могу использовать этот атрибут в качестве причины, упомянутой в моей части ** Edit: **. – VS1

+0

И вы используете приведенный выше пример, вы бы использовали следующий тег. Loman

+0

Отлично, x: Shared просто решил мою проблему, а также для совместного использования одного элемента управления среди разных представлений. – usefulBee

3

Try:

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


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

Спасибо. Я обновил свой вопрос, чтобы включить использование Content Control, как связать ContentControl в каждом окне WPF (.xaml) с ресурсом Button в ресурсном словаре в соответствии с приведенным выше ответом? – VS1

+0

Я не понимаю, как это будет иначе. Можете ли вы опубликовать код своего ContentControl? – KBoek

+0

Я добавил код для использования ContentControl в обоих файлах Window.xaml. Фактическое использование - это не кнопка, а другой элемент управления и его, потому что мы хотим изменить файл xaml ресурсов в будущих версиях без необходимости менять Окно. xaml file code ... – VS1

 Смежные вопросы

  • Нет связанных вопросов^_^