2014-02-14 179 views
1

我试图编辑WPF应用程序的按钮的默认模板,“MouseEnter”和“MouseLeave”事件正在工作,问题与基本上看起来“IsPressed”事件不被triggered.I也去掉了在WPF中未触发IsPressed事件

RenderPressed="{TemplateBinding IsPressed}" 

一部分,但该按钮只是似乎忽略我IsPressed事件 下面的代码:

<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#F3F3F3" Offset="0"/> 
    <GradientStop Color="#EBEBEB" Offset="0.5"/> 
    <GradientStop Color="#DDDDDD" Offset="0.5"/> 
    <GradientStop Color="#CDCDCD" Offset="1"/> 
</LinearGradientBrush> 
<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/> 
<Style x:Key="ButtonDark1" TargetType="{x:Type Button}"> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/> 
    <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Padding" Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true"> 
        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Themes:ButtonChrome> 
       <ControlTemplate.Triggers> 
        <EventTrigger RoutedEvent="Control.MouseEnter"> 
         <BeginStoryboard> 
          <Storyboard > 
           <DoubleAnimation Duration="0:0:0.3" To="0.8" Storyboard.TargetProperty="Opacity"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
        <EventTrigger RoutedEvent="Control.MouseLeave"> 
         <BeginStoryboard> 
          <Storyboard > 
           <DoubleAnimation Duration="0:0:0.3" To="0.5" Storyboard.TargetProperty="Opacity"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
        <Trigger Property="IsKeyboardFocused" Value="true"> 
         <Setter Property="RenderDefaulted" TargetName="Chrome" Value="false"/> 
        </Trigger> 
        <Trigger Property="ToggleButton.IsChecked" Value="true"> 
         <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="#ADADAD"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="Foreground" Value="LightBlue"></Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

在此先感谢。

回答

1

再一次,我们有一个问题,有人已经搞砸了他们的ControlTemplate,并希望别人来解决它。答案始终是相同的... 从默认ControlTemplate开始为您的Button。您可以在MSDN上的Button Styles and Templates页面找到您的Button的默认ControlTemplate

如果您查看链接的页面,您将看到一个VisualStateManager.VisualStateGroups集合,并在该集合中找到名为PressedVisualState。再远一点,你会看到如下:

<VisualTransition GeneratedDuration="0" To="Pressed" /> 

这些是管理视觉Pressed状态。

当更改默认的ControlTemplate时,最好从整个默认XAML开始,并首先在您的自定义ControlTemplate中获得该工作。一旦你有它的工作,然后你可以开始操纵它,一点一滴地定期检查它,每改变一次。那么,如果它不能工作一次,你可以撤消最后几个变化,找出你做错了什么。

+0

对不起,我是WPF新手,我将从默认模板开始,而不是编辑现有模板,希望这会得到解决,谢谢。 – JacobTK

+0

完美的,这工作,从默认模板开始,它告诉我,我以错误的方式在事件中分配属性。 我用默认的笔刷之一改变颜色,而不是它的作品。 谢谢。 – JacobTK