2010-02-23 34 views
4

在我以前的公司,我們使用Flex在Flash中創建圖形資源創建了我們的RIA。在Flash中,您可以簡單地爲不同狀態佈置圖形,即翻轉,禁用。如何在Silverlight 3中使用視覺狀態製作簡單的基於圖像的按鈕?

現在,我正在開發一個Silverlight 3項目。我得到了一堆需要用作按鈕圖形的圖像,這些按鈕具有翻轉,按下和正常狀態。我無法弄清楚如何在Visual Studio 2008或Expression Blend 3中針對不同的視覺狀態簡單地創建具有不同圖像的按鈕。

這裏是我目前的位置。我的按鈕,這樣定義的XAML:出現

<Button Style="{StaticResource MyButton}"/> 

MyButton風格如下:

<Style x:Key="MyButton" TargetType="Button"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
     <Image Source="/Assets/Graphics/mybtn_up.png" Width="54" Height="24"> 
      <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="FocusStates"> 
       <VisualState x:Name="Focused"/> 
       <VisualState x:Name="Unfocused"/> 
      </VisualStateGroup> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal"/> 
       <VisualState x:Name="MouseOver"/> 
       <VisualState x:Name="Pressed"/> 
       <VisualState x:Name="Disabled"/> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
     </Image> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

我無法弄清楚如何分配不同的模板,以不同的狀態,也沒怎麼改變圖像的來源基於我處於哪種狀態。我該怎麼做?另外,如果您知道任何描述Silverlight樣式工作原理的良好文檔,那就太棒了。我能想出的所有搜索結果令人沮喪地無濟於事。

編輯:

我發現了一種通過故事板來改變形象是這樣的:

<Style x:Key="MyButton" TargetType="Button"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
     <Image Source="/Assets/Graphics/mybtn_up.png" 
       Width="54" Height="24" x:Name="Image"> 
      <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="FocusStates"> 
       <VisualState x:Name="Focused"/> 
       <VisualState x:Name="Unfocused"/> 
      </VisualStateGroup> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal"/> 
       <VisualState x:Name="MouseOver"> 
       <Storyboard Storyboard.TargetName="Image" 
          Storyboard.TargetProperty="Source"> 
        <ObjectAnimationUsingKeyFrames> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="/Assets/Graphics/mybtn_over.png"/> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Pressed"> 
       <Storyboard Storyboard.TargetName="Image" 
          Storyboard.TargetProperty="Source"> 
        <ObjectAnimationUsingKeyFrames> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="/Assets/Graphics/mybtn_active.png"/> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Disabled"/> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
     </Image> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

然而,這似乎是在做的事情對我的一種奇怪的方式。有沒有更完整的標準方法?

+1

此博客描述瞭如何製作一個單獨的圖像按鈕控件,它可以很好地完成您想要的功能:[AJ's blog](http://ajdotnet.wordpress.com/2010/01/24/silverlight-bitspieces-the-first-步驟與視覺狀態經理/) – 2011-05-17 16:49:27

回答

3

我想我做了什麼這樣做的方式,因爲沒有人提出過這樣的意見。只需接受這個答案即可。

+0

所有這一切,只是爲了在XAML中看起來低於平均水平的基於圖像的按鈕? Windows窗體仍然統治着他們。在我看來,所有優秀的技術都會隨着時間的推移而變得冷清,而變得更加費力,耗費時間的野獸。 – 2013-07-24 15:37:13

相關問題