2012-04-12 5 views
2

Ich erstelle ein Ressourcenwörterbuch für meine Anwendung, wo ich einige "Symbol + Text" -Schaltflächen haben werde. Da sie alle gleich aussehen werden (außer für das Symbol und Text), habe ich einen generischen Stil geschaffen als Basis für die andere zu dienen:Verwenden eines generischen Stils als Basis vs. benutzerdefiniertes Benutzersteuerelement

<!-- Generic ActionButtonStyle --> 
<Style x:Key="ActionButtonStyle" TargetType="{x:Type Button}"> 
    <!-- some setter properties --> 
    <Setter Property="ContentTemplate" Value="{DynamicResource ButtonDataTemplate}"/> 
</Style> 
<DataTemplate x:Key="ButtonDataTemplate"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="24" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Image Source="{Binding Source}" 
       Stretch="Uniform" 
       Grid.Column="0" 
       Margin="2"/> 
     <TextBlock Text="{Binding text}" 
        TextWrapping="Wrap" 
        Grid.Column="1" 
        Margin="2" 
        VerticalAlignment="Center"/> 
    </Grid> 
</DataTemplate> 

Und ich habe ein paar Bilder für die Symbole:

<!-- Icons --> 
    <ImageSource x:Key="textToSpeech">Images/GreyIcons/TextToSpeech.png</ImageSource> 
    <ImageSource x:Key="play">Images/GreyIcons/Play.png</ImageSource> 
    <ImageSource x:Key="playSound">Images/GreyIcons/PaySound.png</ImageSource> 
    . 
    . 
    . 
    . 
    <ImageSource x:Key="group">Images/GreyIcons/Goup1.png</ImageSource> 

Und ich würde gerne individuelle Stile für jede Schaltfläche (entsprechend jedem Symbol) erstellen. Etwas wie dieses:

<!-- Specific ActionButtonStyles --> 
<Style x:Key="TextToSpeechButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource ActionButtonStyle}"> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <Image Source="{StaticResource textToSpeech}" 
     </Setter.Value> 
    </Setter> 
</Style> 

Ich weiß, dass dies nicht funktioniert .. Wie soll ich es tun? Soll ich ein benutzerdefiniertes Benutzersteuerelement für die generische Schaltfläche erstellen? Der Text ist für ein Objekt in meinem Modell bindend, ebenso der Befehl (an eine Aktion).

Antwort

1

Das Beispiel von dem, was Sie suchen, scheint zu fehlen, aber es scheint, dass Sie nach "BasedOn" suchen - die Sie zwar erben, aber einen zuvor definierten Stil überschreiben können. Sie können es wie folgt implementieren:

<Style x:Key="MyButtonStyle" BasedOn="{StaticResource ActionButtonStyle}"> 
    <Setter.../> 
</Style> 
+0

Ich weiß das, aber welchen Setter sollte ich verwenden? (Irgendein Code fehlte, ich habe gerade meine Frage aktualisiert) – Joana

1

Sie müssen eine abgeleitete Klasse von Button erstellen, die zwei neue DependancyProperties hinzufügt. Sie würden so etwas wie Text und ImageSource heißen. Ihre abgeleitete Klasse würde auch das ContentTemplate wie angegeben festlegen. Dieses ContentTemplate würde gegen die Text- und ImageSource-Abhängigkeitseigenschaften gebunden.

können Sie dann das benutzerdefinierte Steuerelement in XAML wie diese schaffen ...

<app:CustomButton Text="Play" Source="{Binding play}"/> 

... aber wenn Sie die gleiche Taste immer und immer wieder wollen könnten Sie einen Stil erstellen, die auf der Custombutton angewendet wird und legt diese beiden Eigenschaften nach Bedarf fest.

Verwandte Themen