2017-04-06 2 views
1

Ich erstelle eine neue benutzerdefinierte Schaltfläche, alles funktioniert einwandfrei. Ich verwende das Storyboard für die Animation und das Storyboard enthält die Ereignisse MouseEnter, MouseLeave, MouseDoun und MouseUp. Nach der Einführung von Click-Ereignis Mousedown-Ereignis nicht mehr funktioniert, gefolgt von MouseUp Der XAML-Code des Custombutton ist .....MouseDown-Ereignis wird nicht ausgelöst, nachdem Click-Ereignis für dasselbe Element verwendet wurde

<Style TargetType="{x:Type local:FlatButton}"> 
    <Setter Property="Focusable" Value="False" /> 
    <Setter Property="FontFamily" Value="Segoe MDL2 Assets"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:FlatButton}"> 
      <Grid> 
      <Rectangle Name="Part_Rectangle" Fill="{Binding Path=Background}"/> 
      <Label Name="Part_Label" Foreground="White" FontSize="{Binding FontSize, FallbackValue='9'}" 
        HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
        Style="{StaticResource StyleGray}" 
        Content="{Binding Path=Caption, RelativeSource={RelativeSource TemplatedParent}}" 
        FontFamily="{Binding Path=FontFamily, RelativeSource={RelativeSource TemplatedParent}}"/> 
      </Grid> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 

Der Stil für das Label ist .....

<Style x:Key="StyleGray" TargetType="Label"> 
    <Setter Property="Background" Value="#00000000"/> 
    <Style.Triggers> 
     <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <BeginStoryboard> 
      <Storyboard> 
      <ColorAnimation Storyboard.TargetProperty="(Label.Background).(SolidColorBrush.Color)" 
             To="#26000000" Duration="0:0:0.15"/> 
      </Storyboard> 
     </BeginStoryboard> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="Mouse.MouseLeave"> 
     <BeginStoryboard> 
      <Storyboard> 
      <ColorAnimation Storyboard.TargetProperty="(Label.Background).(SolidColorBrush.Color)" 
             To="#00000000" Duration="0:0:0.15"/> 
      </Storyboard> 
     </BeginStoryboard> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="Mouse.MouseDown"> 
     <BeginStoryboard> 
      <Storyboard> 
      <ColorAnimation Storyboard.TargetProperty="(Label.Background).(SolidColorBrush.Color)" 
             To="#3F000000" Duration="0:0:0.15"/> 
      </Storyboard> 
     </BeginStoryboard> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="Mouse.MouseUp"> 
     <BeginStoryboard> 
      <Storyboard> 
      <ColorAnimation Storyboard.TargetProperty="(Label.Background).(SolidColorBrush.Color)" 
              To="#26000000" Duration="0:0:0.15"/> 
      </Storyboard> 
     </BeginStoryboard> 
     </EventTrigger> 
    </Style.Triggers> 
    </Style> 

Und die Umsetzung der Taste ist ...

<local:FlatButton Grid.Column="8" x:Name="CloseButton" Caption="&#xE947;" 
           Height="30" Width="45" FontSize="10" 
           ButtonStyle="{StaticResource StyleRed}"/> 

und der Code Behind ist ...

void CloseBtn_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = this.TemplatedParent as Window; 
    if (window != null) 
    { 
    window.Close(); 
    } 
} 

Bitte, sag mir, was ich falsch mache.

Antwort

0

Ich poste dies als eine Antwort, weil ich nicht kommentieren kann. Wenn ich mir Ihren Code ansehe, denke ich, dass das Problem mit der Handhabung von RountedEvents von der Schaltfläche selbst zusammenhängt.

Versuchen Sie, die Storyboards des Labels innerhalb der Schaltfläche ControlTemplate Triggers auszuführen, anstatt einen Stil für das Label zu verwenden, und richten Sie die Schaltflächenereignisse anstelle der Labelereignisse ein.

+0

Ich habe bereits versucht, das Problem ist das gleiche. –

+1

Ich habe festgestellt, dass der Systemimport für ein benutzerdefiniertes Steuerelement nicht korrekt ist. Ich benutze - System.Windows.Control.Button anstelle von - Control. Aber wenn ich Control verwende, kann ich Click-Event nicht verwenden. –

+0

Ja, um eine benutzerdefinierte Schaltfläche zu implementieren, sollten Sie von Button oder vorzugsweise ButtonBase erben. :) –

Verwandte Themen