2011-05-28 32 views
7

如何在silverlight中創建像這樣的按鈕。我需要表達融合嗎?silverlight中的自定義按鈕

由於我需要在我的應用程序中的許多地方使用修改的按鈕,我應該把它作爲用戶控件嗎?

enter image description here

+2

你只是看看你還是已經有漸變顏色的細節? Blend會幫助很多,如果你只是看看...然而它完全可以在一個樣式中使用xaml(儘管可能很耗時)。您需要同時查看xaml和設計器,直到您看到您希望的漸變色。然後,您可以創建自己的繼承版本的按鈕,或者只使用單個按鈕或所有按鈕上的樣式。 – 2011-05-28 13:10:47

回答

11

您不需要UserControl這個,只需將一個自定義的Button模板作爲樣式資源,然後您可以通過在任何Button實例上設置樣式來重複使用。

儘管沒有Blend是可行的,但我強烈建議您至少獲得試用版,這對設計/視覺開發來說是一個非常好的IDE!

編輯:作爲一個小禮物這裏有一個出發點:)

<Style x:Key="ButtonStyle1" TargetType="Button"> 
    <Setter Property="Foreground" Value="#FFFFFFFF"/> 
    <Setter Property="Padding" Value="3"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="BorderBrush" Value="#FF000000"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Grid> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
             <VisualState x:Name="Normal"/> 
             <VisualState x:Name="MouseOver"/> 
             <VisualState x:Name="Pressed"/> 
             <VisualState x:Name="Disabled"> 
              <Storyboard> 
               <DoubleAnimation Duration="0" To="0.4" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="DisabledVisualElement"/> 
              </Storyboard> 
             </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="FocusStates"> 
             <VisualState x:Name="Focused"> 
               <Storyboard> 
                <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualElement"/> 
               </Storyboard> 
             </VisualState> 
             <VisualState x:Name="Unfocused"/> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="Background" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
            <Border.Background> 
             <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
              <GradientStop Color="#FF707070" Offset="0"/> 
              <GradientStop Color="#FF666666" Offset="0.49"/> 
              <GradientStop Color="#FF5e5e5e" Offset="0.51"/> 
              <GradientStop Color="#FF535353" Offset="1"/> 
             </LinearGradientBrush> 
            </Border.Background> 
          </Border> 
          <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
           <ContentPresenter.Effect> 
             <DropShadowEffect BlurRadius="3" ShadowDepth="2" Opacity="0.5"/> 
           </ContentPresenter.Effect> 
          </ContentPresenter> 
          <Rectangle x:Name="DisabledVisualElement" Fill="#FFFFFFFF" IsHitTestVisible="false" Opacity="0"/> 
          <Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Margin="1" Opacity="0" Stroke="#FF6DBDD1" StrokeThickness="1"/> 
        </Grid> 
       </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

模板ButtonStyle1應放在App.xaml中。我應該如何從我的xaml頁面引用它。我試圖按照某些網站提供的指導方針進行操作,但沒有奏效。 – devnull 2011-06-02 11:21:46

+2

最簡單的方法是在App.xaml內創建一個''標記和一個''標記並粘貼到那裏,但是你也可以創建一個單獨的XAML作爲你的'ResourceDictionary'並且導入到'App.xaml'使用'' – dain 2011-06-02 11:26:56

+0

我想添加鼠標在您的模板上的效果。我應該用Expression Blend中的這段代碼創建一個新的XAML,以便鼠標懸停,禁用等事件可見。 – devnull 2011-06-04 03:14:51

2

你可以不用手工混合,但相信我,用混合會給你更多的權力,你會得到的時間部分更驚人的結果,如果你決定你需要自己做這一切。

2

我肯定會推薦摻和物,它造型的控制和創建模板時節省很多時間。

但是,如果你不具有按鈕完全相同一樣的圖像設置,還有,你可以使用(如JetPack),從中你可以借模板和相對修正顏色的幾個主題很容易在XAML中。