2014-10-27 223 views
0

有人爲應用程序的按鈕做了自定義樣式。現在我想根據此自定義樣式創建自定義樣式。例如,我想製作一個「關閉按鈕」,以便重新使用所有其他應用程序。我試過這個:Silverlight樣式:基於自定義樣式的自定義樣式

<Style x:Key="GlassButtonClose" TargetType="Button" BasedOn="{StaticResource GlassButton}"> 
    <Setter Property="HorizontalAlignment" Value="Right" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="auto" /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <Image Grid.Column="0" Grid.Row="0" Source="/Balisage;component/Images/Close.png" Width="24" Height="24" /> 
        <TextBlock Grid.Column="1" VerticalAlignment="Center" Text="{Binding Source={StaticResource LocCommonStrings}, Path=ButtonLabelClose}" Margin="0" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

但是這並不能保持GlassButton的設置。我怎樣才能擴展設置,保持現有的設置?

感謝您的幫助

+0

哪「GlasButton」設置是否要保留?你正在覆蓋'Horizo​​ntalAlignment'和'Template'(因此所有定義的'VisualStates')。 – Martin 2014-10-27 12:13:21

+0

謝謝,這是我的理解,但我不知道如何保持現有的視覺狀態和添加新的。 – user2223898 2014-10-27 14:55:22

回答

1

基礎上所示的模板和它看起來像你的評論你的答案只需要有一個spacific GlassButton具有固定圖標和文本。並且您想要使用此按鈕而無需一次又一次指定其內容。

解決方案: 準備您自己的類型GlassStyleCloseButton

public class GlassStyleCloseButton : Button 
{ 
    public GlassStyleCloseButton() { 
     DefaultStyleKey = typeof(GlassStyleCloseButton); } 
} 

和新類型的樣式(可放置在App.xaml中或generic.xaml):

<Style TargetType="GlassStyleCloseButton" BasedOn="{StaticResource GlassButton}"> 
    <Setter Property="Content" Value="{Binding Path=ButtonLabelClose, 
     Source={StaticResource LocCommonStrings}}"/> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 

       <Image 
        Source="/Balisage;component/Images/Close.png" 
        Width="24" 
        Height="24"/> 
       <TextBlock 
        Grid.Column="1" 
        VerticalAlignment="Center" 
        Text="{TemplateBinding Content}"/> 

       </Grid> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

,你可以使用它像這樣:

<SomewhereInMyApp> 
    ... 
    <GlassStyleCloseButton/> 
</SomewhereInMyApp> 
+0

非常感謝,ContentTemplate就是我一直在尋找的東西。只有一件事,TemplateBinding不起作用,我必須把真正的綁定看到文本,你知道爲什麼嗎? – user2223898 2014-10-28 07:47:09

+0

沒關係,我找到了解決方案,我使用與RelativeSource TemplatedParent的普通綁定來查看文本。 – user2223898 2014-10-28 08:08:08