2014-02-14 2 views
1

"MouseEnter"및 "MouseLeave"이벤트가 작동하고 WPF 응용 프로그램에 대한 단추의 기본 서식 파일을 편집하려고합니다. 문제는 기본적으로 "IsPressed"이벤트와 같습니다. 사전에WPF에서 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> 

감사 : triggered.I 또한

RenderPressed="{TemplateBinding IsPressed}" 

부분을 제거하지만, 버튼이 바로 여기 내 IsPressed 이벤트 을 무시하는 것 같다 수 없습니다에 코드입니다.

답변

1

다시 한 번 누군가가 자신의 ControlTemplate을 엉망으로 만들고 다른 사람이 해결하기를 바라는 질문이 있습니다. 대답은 항상 동일합니다. Button의 경우 이 기본값 인 ControlTemplate으로 시작됩니다. MSDS의 Button Styles and Templates 페이지에서 Button에 대한 기본값 ControlTemplate을 찾을 수 있습니다.

링크 된 페이지를 보면 VisualStateManager.VisualStateGroups 컬렉션이 표시되고 그 컬렉션 안에 이라는 VisualState이라는 컬렉션이 있습니다. 최대 조금 더 멀리,이 표시되어야합니다

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

이 시각적 Pressed 상태를 관리하는 것입니다.

기본값 인 ControlTemplate을 변경하는 경우 전체 기본 XAML로 시작하여 사용자 지정 ControlTemplate에서 먼저 작업하는 것이 가장 좋습니다. 일단 작동 시키면 다음에을 조금씩 조작하고 몇 가지 변경 사항이있을 때마다 정기적으로 점검 할 수 있습니다. 그런 다음 한 번 작동하지 않으면 마지막 몇 가지 변경 사항을 실행 취소하고 잘못한 작업을 찾을 수 있습니다.

+0

죄송합니다. 저는 WPF를 처음 사용합니다. 기존 템플릿을 편집하는 대신 기본 템플릿으로 시작하겠습니다. 잘하면 고칠 것입니다. 고마워요. – JacobTK

+0

완벽하게,이 작품, 기본 템플릿에서 시작된 그것은 내가 잘못된 방식으로 이벤트에 속성을 할당했다. 기본 브러시 중 하나를 사용하여 색상을 변경했지만 작동하지 않습니다. 감사합니다. . – JacobTK

관련 문제