2014-02-14 4 views
1

Я пытаюсь изменить шаблон по умолчанию для приложения WPF, события «MouseEnter» и «MouseLeave» работают, проблема связана с событием «IsPressed», которое в основном кажется чтобы не быть triggered.I также удаленаIsPressed событие не запускается в WPF

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. Вы можете найти по умолчанию ControlTemplate для вашего Button на странице Button Styles and Templates на MSDN.

Если вы посмотрели на связанную страницу, вы увидите коллекцию VisualStateManager.VisualStateGroups, и в этой коллекции вы найдете VisualState с именем Pressed. Чуть дальше, вы должны увидеть это:

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

Это то, что управлять визуальным Pressed состояние.

При изменении по умолчанию ControlTemplate, лучше всего начать с всего XAML по умолчанию и сначала получить, что работает в вашем обычном ControlTemplate. После того, как вы его заработаете, затем, вы можете начать его манипулировать поэтапно и регулярно проверять его после каждого изменения. Затем, если он не работает один раз, вы можете просто отменить последние несколько изменений и выяснить, что вы сделали неправильно.

+0

Извините, я новичок в WPF, я начну с шаблона по умолчанию, как вы сказали, вместо редактирования существующего, надеюсь, это будет исправлено, спасибо. – JacobTK

+0

Отлично, это сработало, началось с шаблона по умолчанию, он показал мне, что я неправильно присваивал свойство в событии. Я использовал одну из кистей по умолчанию, меняющих цвета, и не работает. Спасибо. – JacobTK

Смежные вопросы