2010-12-11 11 views
3

ich Silverlight bin mit 4. Ich habe eine Schaltfläche:Silverlight: Warum funktioniert dieser Stil nicht?

 <Button Click="addTopicButton_Click"> 
      <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
     </Button> 

Es sieht gut aus. Allerdings, wenn ich zu setzen versuchen, seine Content mit einem Style, keine Inhalte angezeigt:

<Style x:Name="AddButton" TargetType="Button"> 
     <Setter Property="Content"> 
      <Setter.Value> 
       <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" /> 

Der Knopf ist leer. Warum ist das?

Antwort

1

sollten Sie x verwenden: Key Ihr Style-Element zu nennen, statt x: Name der

+0

Es könnte nicht die ganze Antwort sein - aber es wird sicherlich etwas mit dem Problem zu tun haben. – ChrisF

5

Es ist nicht eine gute Idee, UIElements wie Image in einem Stil gehören. Ein solches Objekt wird nur einmal erstellt, wenn der Stil während der Xaml-Analyse zusammengesetzt wird. Eine wichtige Sache, die Sie über UIElements verstehen sollten, ist, dass eine einzelne Instanz nur einmal in der visuellen Struktur angezeigt werden kann. Selbst wenn der Code funktioniert, funktioniert er nur für eine Schaltfläche. Eine andere Schaltfläche, die denselben Stil verwendet, funktioniert nicht.

Stattdessen können Sie die ContentTemplate Eigenschaft wie folgt verwendet werden: -

<Style x:Key="AddButton" TargetType="Button"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" /> 

Die Schaltfläche gegeben ist nun ein DataTemplate, dass sie das Kind-Element zu konstruieren, verwendet, um den Inhalt der Taste macht. Jeder Knopf baut daher seine eigene unabhängige Instanz einer Image Steuerung auf.

0

Ihr Code erfordert zwei Änderungen.

  1. x:Name zu x:Key geändert und darauf verweisen, wenn Sie es verwenden möchten, StaticResource verwenden.

  2. Ändern Sie diese

    <Setter.Value> 
         <Image Source="whatever..." /> 
    </Setter.Value> 
    

    dazu

    <Setter.Value> 
        <DataTemplate> 
         <Image Source="whatever..." /> 
        </DataTemplate> 
    </Setter.Value> 
    

Sehen Sie, wenn es Ihnen hilft!

Verwandte Themen