2013-06-18 11 views
6

In meiner WPF-Fensteranwendung, wenn ich die Maus über meine Schaltfläche nehme, verschwindet das Hintergrundbild auf der Schaltfläche und die Schaltfläche erscheint, als ob es kein Bild hat. Was ich will ist, wenn die Maus auf der Schaltfläche ist, oder wenn die Schaltfläche geklickt wird, sollte das Bild noch auf der Schaltfläche angezeigt werden, es sollte nicht verschwinden.Hintergrundbild auf einer Schaltfläche verschwindet auf Maus über

Bitte helfen.

Dank

+1

Haben Sie irgendwelche Eventtriggers oder Code hinter das könnte das Bild ändern? –

+0

Nein. Das Bild auf der Schaltfläche ändert sich nicht von überall. Ich gebe das Bild im Xaml zur Entwurfszeit an. Aber wenn ich das Bild bei Triggern ändern muss, dann mache ich das auch. – WAQ

+0

Können Sie Ihren Code posten? Erstellen von Schaltflächen und Schaltflächen. – Sonhja

Antwort

8

Was ist mit dir passiert, ist normal. Wenn Sie eine Schaltfläche erstellen, werden ihre Standardeigenschaften verwendet, falls Sie sie nicht ändern/überschreiben.

Wenn Sie in diesem Fall Ihre Schaltfläche erstellen, überschreiben Sie die Eigenschaft Background, aber nur für den normalen Status Ihrer Schaltfläche. Wenn Sie möchten, dass sich der Hintergrund auch ändert, wenn Sie den Mauszeiger bewegen, sollten Sie dies der Schaltfläche mitteilen.

Zu diesem Zweck schlage ich Ihnen die Schaltfläche Vorlage mit Stile außer Kraft zu setzen, wie folgt aus:

<Window x:Class="ButtonTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <ImageBrush x:Key="ButtonImage" ImageSource="/ButtonTest;component/Resources/ok.png"></ImageBrush> 
    <Style TargetType="Button"> 
     <Setter Property="Background" Value="{StaticResource ButtonImage}"></Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
        Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Foreground" Value="Blue" /> 
          <Setter Property="Cursor" Value="Hand" /> 
          <!-- If we don't tell the background to change on hover, it will remain the same --> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="84,75,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 
</Grid> 
</Window> 

In diesem Fall wird dieser Stil für alle Tasten angewendet werden. Sie können die Schaltfläche anwenden Stil geben Sie eine x:Key zu Ihrem Stil hinzufügen und es dann in Ihre Schaltfläche festlegen:

<Style TargetType="Button" x:Key="ButtonStyled"> 

..... 

<Button Style="{StaticResource ButtonStyled}" Content="Button" Height="23" HorizontalAlignment="Left" Margin="84,75,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 
+0

Ich habe den von Ihnen bereitgestellten Code verwendet. Arbeite gut, wenn ich es nicht gebe x: key = "ButtonStyled". Alle Schaltflächen erhalten das gestylte Verhalten. Aber wenn ich meine erforderliche Schaltfläche Style = "ButtonStyled" gebe, bekomme ich eine Ausnahme mit der Aussage "Set-Eigenschaft 'System.Windows.FrameworkElement.Style' warf eine Ausnahme". Irgendeine Idee dazu? – WAQ

+1

@WasimQadir sollte es 'Style =" {StaticResource ButtonStyled} "' – lisp

+0

@lisp Vielen Dank Jungs. Es funktionierte :) – WAQ

2

Ich bin ein wenig zu spät zur Party, aber Sie sind alle diese zu kompliziert machen.

Alles, was Sie tun müssen, ist, den Inhalt und den Hintergrund gesetzt:

<Button x:Name="YouTubeButton" Width="148" Height="76" BorderBrush="Black" 
    Click="YouTubeButton_Click" Margin="112,20,112,0" 
    MouseEnter="Button_OnMouseEnter" MouseLeave="Button_MouseLeave"> 
    <Button.Content> 
     <Image Source="Images/YouTube.png" /> 
    </Button.Content> 
    <Button.Background> 
     <ImageBrush ImageSource="Images/YouTube.png" /> 
    </Button.Background> 
</Button> 

(Optional - makes the mouse behave like a hand clicking a link) 
#region Button_MouseLeave(object sender, MouseEventArgs e) 
/// <summary> 
/// This event is fired when the mouse leaves a button 
/// </summary> 
private void Button_MouseLeave(object sender, MouseEventArgs e) 
{ 
    // Change the cursor back to default 
    Cursor = null; 
} 
#endregion 

#region Button_OnMouseEnter(object sender, EventArgs e) 
/// <summary> 
/// This event is fired when the mouse hovers over a button 
/// </summary> 
public void Button_OnMouseEnter(object sender, EventArgs e) 
{ 
    // Change the cursor to a Hand pointer 
    Cursor = Cursors.Hand; 
} 
#endregion 
+0

Dies fügt ein anderes Steuerelement in der Schaltfläche, aber das ist viel besser! Danke, ich werde das benutzen! – Sree

Verwandte Themen