2015-06-14 85 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

非常讚賞輸入,但我想你可能已經完全錯過了我的要求一點。上面的例子仍然要求後面的代碼直接依賴(並引用)按鈕的資源。如果我可以使用這種方法,我會直接添加邊框。 –