2017-02-01 2 views
0

У меня есть несколько кнопок в разных окнах, которые имеют одинаковый контент. Но если два окна всплыли вместе, из содержимого кнопки первого окна исчезает.Как установить один контент на несколько кнопок в WPF

Кнопка Стиля:

<Style TargetType="{x:Type Button}" x:Key="BSaveBtn"> 
    <Setter Property="Padding" Value="5"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="Width" Value="70"/> 
    <Setter Property="Height" Value="68"/> 
    <Setter Property="Background" Value="{DynamicResource FlatGreen}"/> 
    <Setter Property="Template" Value="{DynamicResource FlatGreenBtnHover}"/> 
    <Setter Property="Margin" Value="5"/> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <StackPanel Orientation="Vertical" FlowDirection="RightToLeft"> 
       <Image Width="30" Source="/login;component/img/buttonpic/save.png"/> 
       <TextBlock Text="save" FontSize="16" FontFamily="/login;component/fonts/#Droid Arabic Kufi" Foreground="White" HorizontalAlignment="Center"/> 
      </StackPanel> 
     </Setter.Value> 
    </Setter> 
</Style> 

кнопка Коды в окнах:

<Button Style="{DynamicResource BSaveBtn}" Template="{DynamicResource FlatGreenBtnHover}" /> 

проблема происходит только с содержанием -ны другого стиля Свойства-.

ответ

0

Экземпляр элемента может отображаться только в визуальном дереве. Вы можете установить атрибут x: Shared для стиля False, чтобы создать новый экземпляр StackPanel для каждой кнопки, к которой вы применяете стиль:

<Style TargetType="{x:Type Button}" x:Key="BSaveBtn" x:Shared="False"> 
    <Setter Property="Padding" Value="5"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="Width" Value="70"/> 
    <Setter Property="Height" Value="68"/> 
    <Setter Property="Background" Value="{DynamicResource FlatGreen}"/> 
    <Setter Property="Template" Value="{DynamicResource FlatGreenBtnHover}"/> 
    <Setter Property="Margin" Value="5"/> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <StackPanel Orientation="Vertical" FlowDirection="RightToLeft"> 
       <Image Width="30" Source="/login;component/img/buttonpic/save.png"/> 
       <TextBlock Text="save" FontSize="16" FontFamily="/login;component/fonts/#Droid Arabic Kufi" Foreground="White" HorizontalAlignment="Center"/> 
      </StackPanel> 
     </Setter.Value> 
    </Setter> 
</Style> 
1

Кажется, что это нормально работает для меня, когда я тестировал его здесь.

Несколько вещей, которые я заметил, хотя это может помочь. Вам не нужно, чтобы они были DynamicResource, они действительно должны быть StaticResource, если вы не планируете их модифицировать.

Я предполагаю, что вы объявляете их в разделе Windows.Resource или повторяете их в каждом окне? Если это так, вы должны централизовать их в ResourceDictionary.

Создать новый ресурс словарь поместить свой стиль там примерно так:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Style TargetType="{x:Type Button}" x:Key="BSaveBtn"> 
     <Setter Property="Padding" Value="5"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="Width" Value="70"/> 
     <Setter Property="Height" Value="68"/> 
     <Setter Property="Background" Value="{DynamicResource FlatGreen}"/> 
     <Setter Property="Template" Value="{DynamicResource FlatGreenBtnHover}"/> 
     <Setter Property="Margin" Value="5"/> 
     <Setter Property="Content"> 
      <Setter.Value> 
       <StackPanel Orientation="Vertical" FlowDirection="RightToLeft"> 
        <Image Width="30" Source="/login;component/img/buttonpic/save.png"/> 
        <TextBlock Text="save" FontSize="16" FontFamily="/login;component/fonts/#Droid Arabic Kufi" Foreground="White" HorizontalAlignment="Center"/> 
       </StackPanel> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</ResourceDictionary> 

Затем в App.xaml поместить следующее:

<ResourceDictionary>  
    <ResourceDictionary Source="MyResources.xaml" />  
</ResourceDictionary> 

Изображение должно быть действительно в словаре, чтобы не загружайте его несколько раз. Просто добавьте строку в этом ResourceDictionary так:

<BitmapImage UriSource="/login;component/Images/Save.png" x:Key="Save" PresentationOptions:Freeze="True" /> 

Установка PresentationOptions: Заморозка также поможет, если изображение никогда не модифицируется.

Ваш призыв к изображению будет потом изменить, чтобы быть:

<StackPanel Orientation="Vertical" FlowDirection="RightToLeft"> 
    <Image Width="30" Source="{StaticResource Save}"/> 
     <TextBlock Text="save" FontSize="16"  FontFamily="/login;component/fonts/#Droid Arabic Kufi" Foreground="White" HorizontalAlignment="Center"/> 
</StackPanel> 

После того, как ваши ресурсы централизованы в ResourceDictionary (или несколько), что делает его легко применить те же стили в любом месте вашего приложения, и мы надеемся, помогите с вашей проблемой. Если нет, пожалуйста, сообщите больше информации о проблеме, которую у вас есть, например, пример кода, чтобы проблема возникла.

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