2014-07-22 22 views
0

我有一個很艱難的時期尋找一種方法來執行下列操作...的Silverlight - 樣式的所有圖像按鈕來改變鼠標懸停

我有我的「圖片按鈕樣式」,它是適用於每一個按鈕在我的Silverlight應用程序。有沒有辦法讓毯子VisualStateManager更改MouseOver上的圖像,這將適用於每個按鈕?我有一對夫婦的想法,但我不知道他們是否可以實現?

比方說,我的按鈕圖像路徑是一致的:

  • image1.png
  • image2.png

  • 圖像1 - hover.png
  • image2 - hover.png

有沒有辦法改變圖像的路徑來追加「 - 懸停」?我想過用這一個的IValueConverter,但不知道如何訪問控制狀態...

另一種想法,我有是如果有辦法做到這一點的方式:

<Button> 
    <Image Source="../Images/image1.png" Width="70"/> 
    <Image Source="../Images/image1 - hover.png" Width="70"/> 
</Button> 

有兩個內容(內容數組?),並且在正常狀態下,只將第一個內容不透明度設置爲1,其餘設置爲0.然後在MouseOver上切換不透明度。

這些解決方案中的任何一個都可行嗎?它們如何實現?

感謝


編輯:我知道我可以做自定義樣式爲每個轉出他們的圖像按鈕,但我想,我可以適用於所有按鈕的毯子風格。

+0

那麼爲什麼不只是讓你的風格(除了使用可見性而不是不透明的重量較輕t)並將其應用於全球? –

+0

請說明。你已經有一個運作風格的所有按鈕?但是這個樣式目前不能在mouseOver上的兩個圖像之間切換?而且你想知道你有什麼選擇可以讓你所有的按鈕變成「兩個圖像 - 被交換的鼠標在 - 」按鈕? – Martin

+0

@Martin是的,我只是使用一種只呈現內容的樣式 - 網格/背景等是透明的,所以你只能看到圖像。是的,我有什麼選擇? :) – Adam

回答

1

你可能(AB)使用Tag屬性爲你的目的,並創建了有兩個Image控件的ControlTemplate與BitmapImage結合其UriSource屬性要麼Content或分別Tag屬性:

<Style TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup Name="CommonStates"> 
          <VisualState Name="Normal"/> 
          <VisualState Name="MouseOver"> 
           <Storyboard> 
            <DoubleAnimation 
             Storyboard.TargetName="image1" 
             Storyboard.TargetProperty="Opacity" 
             To="0" Duration="0:0:0.1"/> 
            <DoubleAnimation 
             Storyboard.TargetName="image2" 
             Storyboard.TargetProperty="Opacity" 
             To="1" Duration="0:0:0.1"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Image x:Name="image1"> 
         <Image.Source> 
          <BitmapImage UriSource="{Binding Content, 
           RelativeSource={RelativeSource Mode=TemplatedParent}}"/> 
         </Image.Source> 
        </Image> 
        <Image x:Name="image2" Opacity="0"> 
         <Image.Source> 
          <BitmapImage UriSource="{Binding Tag, 
           RelativeSource={RelativeSource Mode=TemplatedParent}}"/> 
         </Image.Source> 
        </Image> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

現在你可以這樣聲明一個Button:

<Button Content="../Images/image1.png" Tag="../Images/image1_hover.png"/> 
+0

我確實想過這樣的事情......但是,對於一些按鈕,我實際上使用了標籤。另外,我最終希望將這種風格擴展爲三個按鈕 - 正常,懸停和禁用。我可以擴展一個按鈕以包含其他屬性嗎? – Adam

+0

您也許可以使用[附加屬性](http://msdn.microsoft.com/zh-cn/library/cc265152(v = vs.95).aspx)。 – Clemens

+0

我通過使用你的方法去了解這一點,但是我添加了一個轉換器來轉換綁定值。這樣我就可以通過使用Content屬性(即圖像)而將它們分別轉換爲:image.png,image - hover.png,image - disabled.png。謝謝您的幫助! – Adam