2016-01-19 7 views
0

Можно ли установить один и тот же стиль для нескольких элементов управления? Меня судили следующим образом. Но стиль 1-й кнопки не был применен правильно, во втором стиле применен штраф.WPF - установить одинаковый стиль для нескольких элементов управления

Дизайн:

<StackPanel Orientation="Horizontal"> 
    <TextBlock Foreground="White" Margin="0,0,5,0">1st Button</TextBlock> 
    <Button Style="{StaticResource ViewButton}" /> 
    <TextBlock Foreground="White" Margin="25,0,5,0">2nd Button</TextBlock> 
    <Button Style="{StaticResource ViewButton}" /> 
</StackPanel> 

Ресурс:

<Style x:Key="ViewButton" TargetType="Button" BasedOn="{StaticResource ButtonStyle}"> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <StackPanel Orientation="Horizontal"> 
       <Image Source="/Images/View.png" Stretch="None" Width="24" Height="24" /> 
       <TextBlock Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">View</TextBlock> 
      </StackPanel> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Padding" Value="2,0,10,0"/> 
</Style> 

enter image description here

+1

Вы не должны использовать шаблон вместо содержимого в стиле? –

+0

@JanneMatikainen Да, раньше я использовал шаблон, но мне нужно использовать ContentTemplate, чтобы он работал. Наконец, решение nkoniishvt помогло мне. –

ответ

7

Вы установки дважды один и тот же контент на двух различных элементов управления. Проблема в том, что StackPanel в Setter.Value не может иметь двух родителей, поэтому последнее применение будет применено. Вы можете использовать ContentTemplate, чтобы заставить его работать:

<Style x:Key="ViewButton" TargetType="Button" BasedOn="{StaticResource ButtonStyle}"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image Source="/Images/View.png" Stretch="None" Width="24" Height="24" /> 
        <TextBlock Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">View</TextBlock> 
       </StackPanel> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Padding" Value="2,0,10,0"/> 
</Style> 
+0

Спасибо. Прежде чем я попробовал вместо . Спасибо за указание мне правильный путь :) –

0

.... .... ....

Вы должны упомянуть TargetType в качестве кнопки , и вам нужно написать свойство стиля после имени стиля, как я написал.

Надеется, что это будет работать для вас ..

благодаря

+0