Frage

Ich habe ein Standard Button Style accross meine Anwendung angewendet, die einen Mouseover-Stil, der den Textinhalt von weiß bis schwarz ändert angibt. Um dies zu erreichen habe ich versucht, auf die Schaltfläche Vorlage ändern, die ContentPresenter zu entfernen und durch einen TextBlock ersetzen. Das bedeutet aber, dass ich nicht mit gemischtem Inhalt haben kann wie zum Beispiel:

<Button
    <Button.Content>
        <StackPanel Orientation="Horizontal">
            <Path Margin="3" Width="12.375" Height="9.70833" Canvas.Left="0" Canvas.Top="0"
                  Stretch="Fill" Fill="#FF115485"
                  Data="F1 M 18.8333,7.08333L 16.7083,4.91667L 10.5,10.5417L 8.52083,8.6875L 6.45833,10.4792L 10.4792,14.625L 18.8333,7.08333 Z "/>
            <TextBlock Margin="3">Hello</TextBlock>
        </StackPanel>
    </Button.Content>
</Button>

Um die Situation zu verbessern, habe ich dann die ContentPresenter legte wieder an, und auf meinem (nur Text) Tasten angegeben ein ContentTemplate wie folgt aus:

<Button IsDefault="True" Content="Text only Button"
        ContentTemplate="{StaticResource TextButtonTemplate}"
        Command="{Binding ...}" 
        CommandParameter="{...}" />

Und mit einem Template wie unten definiert. Diese Vorlage wird nur für Buttons mit Textinhalt arbeiten, mit anderen Vorlagen wie für gemischte Inhalte benötigt definiert.

<DataTemplate x:Key="TextButtonTemplate">
    <TextBlock Text="{TemplateBinding Content}"
               Foreground="{Binding Path=Foreground,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Button}}" />
</DataTemplate>

Wer weiß, ob es ein Weg gibt ich dies weiter, indem sie den gewünschten Mouseover Stil verbessern kann, ohne dass benutzerdefinierte Vorlagen definieren?

War es hilfreich?

Lösung

den Inhalt Unter der Annahme nicht ausdrücklich keine Farben eingestellt auf seine eigene, können Sie dies erreichen in etwa so:

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="TextBlock.Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

Das funktioniert, weil TextBlock.Foreground eine erbliche Eigenschaft ist. Solange die Kontrollen innerhalb Inhalte Ihrer Schaltflächen nicht explizit ihren eigenen Vordergrund gesetzt ist, wird diese Arbeit. Wenn sie ihre eigenen Farben gesetzt, sind alle Wetten ab.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top