2012-10-30 10 views
6

Ho un pulsante wppf con un'immagine di sfondo.Disattiva l'effetto del mouse sul pulsante

Quando il mouse su sfondo è vuoto e viene visualizzato un pulsante.

Come disattivare l'effetto del mouse?

<Button BorderBrush="{x:Null}" Content="Reset" BorderThickness="0"Foreground="White" Focusable="False"> 
         <Button.Background> 
          <ImageBrush ImageSource="button.png" /> 
         </Button.Background> 
+0

Sembra che tu abbia un trigger per utilizzare il Visual State Manager. Si prega di fornire tutti gli xaml pertinenti. – Aphelion

+0

prova questo; http://stackoverflow.com/questions/1302756/why-is-the-buttons-background-changing pro-tip, se non si ha la reputazione di commentare postare una "risposta trival" e vedere cosa succede. –

risposta

13

Ecco come disattivare gli effetti di mouseover visivo sui pulsanti. Ho lasciato in alcune delle mie impostazioni solo per farti un'idea di come giocare con i trigger e cose del genere, sentiti libero di sperimentare!

<Style TargetType="Button" x:Key="ImageButton" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border Name="border" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Padding="{TemplateBinding Padding}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         CornerRadius="5" 
         Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="BorderBrush" Value="Gainsboro" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Opacity" Value="0.25" /> 
         <Setter Property="BorderBrush" Value="Transparent" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

EDIT: Utilizzando il "BasedOn" + impostazione FocusVisualStyle a null (prime 2 righe) si libera del mouse sopra gli effetti. Tutto il resto è solo un esempio. Ho aggiunto un bordo lì per giocare con esso attraverso un trigger (dal momento che voglio un effetto mouseover personalizzato).

+2

Non sono d'accordo con questo post. Le prime due linee hanno avuto effetto zero nella mia applicazione. Ho letto altrove che non ti è consentito sovrascrivere parzialmente il modello e che devi creare un modello completo e completo affinché funzioni. Sfortunatamente, non ho ancora trovato una soluzione funzionante, ma il consiglio in questo post non ha funzionato per me. – shawn1874

+1

@ shawn1874 - "Ho letto altrove" potrebbe trarre vantaggio da un collegamento o due per spiegare i potenziali problemi di questo approccio. Hai provato l'intero campione invece delle sole prime due righe, in un progetto vuoto che non è stato alterato dalla "tua applicazione", per vedere se non riesci ancora a farlo funzionare? Con 7k views, 12 upvotes e non un singolo downvote, ho l'impressione che questa risposta soddisfi di più. – Joe

8

Nel ControlTemplate della Button la proprietà Sfondo verrà sostituita da un trigger.
È possibile rifare l'intera ControlTemplate e lasciare fuori il cambiamento di sfondo o semplicemente aggiungere l'immagine come contenuto del tuo Button in questo modo per evitare tutte queste complicazioni:

<Button.Content> 
    <Image Source="button.png" /> 
</Button.Content> 

O se avete bisogno il testo in là pure :

<Button.Content> 
    <Grid> 
     <Image Source="button.png" /> 
     <TextBlock Text="Reset" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
    <Grid> 
</Button.Content> 
+0

Non posso usarlo, perché ho Content = "Reset". –

+0

puoi ancora eseguire il layout complesso utilizzando i pannelli per combinare l'immagine e il blocco di testo con "Ripristina" in esso – MrDosu

+1

Grazie per la soluzione molto semplice –

Problemi correlati