2014-01-16 6 views
6

Ich habe dieses Thema zum Festlegen der Grenze einer Schaltfläche zu transparent gefunden. Das funktioniert gut, aber ich möchte dies für den Hintergrund der Schaltfläche und nicht für den Rahmen verwenden.Transparente Schaltfläche Hintergrund in WPF mit Stil

Lösung in Verbindung, die ich in <Window.Resources>...</Window.Resources> gesetzt habe:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="Green"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Quelle: How do you change Background for a Button MouseOver in WPF?

Wie dieser Code bearbeiten, so kann ich dies den Hintergrund meiner Taste, um transparent zu setzen verwenden und nicht die Grenze davon?

Antwort

3

die Lösung für mein Problem gefunden:

Sie Anscheinend muss th hinzufügen e löst innerhalb der ControlTemplate unter ControlTemplate.Trigger aus. Und nachdem Sie das erledigt haben, müssen Sie einen TargetName im Border-Tag setzen und dann den Verweis (-> TargetName = "XXXXX") auf die Eigenschaften setzen, die Sie im border-Tag benannt haben.

So:

<Window.Resources> 
<Style x:Key="MenuButton" TargetType="Button"> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="Height" Value="40" /> 
    <Setter Property="Width" Value="Auto" /> 
    <Setter Property="Foreground" Value="White" /> 
    <Setter Property="Margin" Value="45,0,0,0" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid> 
       <Border Name="MenuBorder" SnapsToDevicePixels="True" BorderBrush="Black" Background="{TemplateBinding Background}" BorderThickness="0,0,0,2" > 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Button.IsFocused" Value="True"> 
         <Setter Property="Background" Value="Transparent"/> 
         <Setter TargetName="MenuBorder" Property="BorderBrush" Value="#FFED6A2B" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

+0

aber in Frage haben Sie sich über isfoused Eigentum geschrieben. Sie sind wrrtrn über ismouseover und evrytime dort ist keine Notwendigkeit des Zielnamens. Sie benötigen Zielnamen in Ihrem Fall, weil Sie zusätzliches Gitter dort hinzugefügt haben. Irgendwie finden Sie heraus Ihre Lösung. Gut . –

+0

ja ich habe einige zusätzliche Eigenschaften hinzugefügt und die Eigenschaft zu IsFocussed geändert, aber das ist nicht ganz das Problem. Es war nur der Hintergrundteil, den ich nicht lösen konnte, um ihn in anderen Situationen transparent zu machen, außer dem Standart-Button-Stil. Ich musste den Teil und den TargetName hinzufügen, damit ich mein Problem lösen konnte. Ruhe ist nur eine Veränderung meiner eigenen Sachen (Update). – Bilow

4

Ändern Sie diese Zeile

<Setter Property="Background" Value="Red"/> 

zu

<Setter Property="Background" Value="Transparent"/> 
6

Versuchen Sie, diese Schnipsel für eine transparente Schaltfläche:

<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" BorderThickness="0"> 
    <-- PUT BUTTON CONTENT HERE e.g. a Image --> 
</Button> 
+0

einfach und effektiv! –

1

verwenden in C# -Code

Button btn = new Button() {BorderBrush=System.Windows.Media.Brushes.Transparent, 
           BorderThickness = new Thickness(0)}; 

oder

yourBtn.BorderBrush=System.Windows.Media.Brushes.Transparent; 
yourBtn.BorderThickness =new Thickness(0);