2015-06-14 65 views
2

我有一个WPF按钮,这样枚举和应用WPF风格编程

<Button Name="HelloWorldButton" 
     Width="100" 
     Height="100" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Style="{StaticResource TileButton}"> 
    Hello world 
</Button> 

使用WPF的造型我已经申请样式模板如下图所示

<Style x:Key="TileButton" TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border x:Name="focusRect" 
         Margin="-6" 
         BorderThickness="6"> 
        <ContentPresenter /> 
        <Border.BorderBrush> 
         <SolidColorBrush x:Name="focusRectBrush" Color="Transparent" /> 
        </Border.BorderBrush> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal" /> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ColorAnimation Duration="0" 
                Storyboard.TargetName="focusRectBrush" 
                Storyboard.TargetProperty="Color" 
                To="Red" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Pressed"> 
           <Storyboard> 
            <ColorAnimation Duration="0" 
                Storyboard.TargetName="focusRectBrush" 
                Storyboard.TargetProperty="Color" 
                To="White" /> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我现在想申请的鼠标悬停通过编程方式编程为VisualState。我查看了HelloWorldButton.Style属性,看不到任何明显的实现方法。

注:显然我明白,这将是微不足道的边境程序添加到按钮上,无需使用声明XAML样式表,但在我的情况,这不是一个可行的方法。

回答

1

终于搞定了。

我一直在寻找的代码是一样简单

VisualStateManager.GoToState(HelloWorldButton, "MouseOver", true); 
0

我说:

<Button Name="HelloWorldButton" 
    Width="100" 
    Height="100" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center" 
    Style="{StaticResource TileButton}" MouseEnter="HelloWorldButton_MouseEnter"> 

我然后复制到另一个风格“Tilebutton2”的风格,我改变颜色红变绿,并在MouseEnter事件我把:

HelloWorldButton.Style = this.Resources["TileButton2"] as Style; 

现在,当您将鼠标悬停在按钮上,边框现在变成绿色。

+0

非常赞赏输入,但我想你可能已经完全错过了我的要求一点。上面的例子仍然要求后面的代码直接依赖(并引用)按钮的资源。如果我可以使用这种方法,我会直接添加边框。 –