2012-08-23 56 views
0

我有很多hiperlink按鈕的樣式非常相似,只是模板中的不同路徑。在Silverlight 5中重複使用相同的樣式和模板中的變化

這裏是XAML片段

<Style x:Key="HeatmapLinkStyle" TargetType="HyperlinkButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="HyperlinkButton"> 
       <Grid Margin="4,2" Height="40" VerticalAlignment="Top"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <DoubleAnimation Duration="0:0:0.2" To="1.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="element" d:IsOptimized="True"/> 
            <DoubleAnimation Duration="0:0:0.2" To="1.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="element" d:IsOptimized="True"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="LinkStates"> 
          <VisualState x:Name="ActiveLink"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="ActiveLinkBorder" Storyboard.TargetProperty="(UIElement.Visibility)"> 
             <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
              <DiscreteObjectKeyFrame.Value> 
               <Visibility>Visible</Visibility> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="InactiveLink"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid Width="32" Height="32" VerticalAlignment="Top"> 
         <Path Data="M50.5,4.7500001C25.232973,4.75 4.75,25.232973 4.7500001,50.5 4.75,75.767029 25.232973,96.25 50.5,96.25 75.767029,96.25 96.25,75.767029 96.25,50.5 96.25,25.232973 75.767029,4.75 50.5,4.7500001z M50.5,0C78.390381,0 101,22.609621 101,50.5 101,78.390381 78.390381,101 50.5,101 22.609621,101 0,78.390381 0,50.5 0,22.609621 22.609621,0 50.5,0z" Stretch="Fill" Fill="#FF3FA9F5" Visibility="Visible" /> 
         <Path x:Name="element" Data="F1M-1834.73,-354.432L-1772.06,-354.432 -1772.06,-417.099 -1834.73,-417.099 -1834.73,-354.432z M-1832.68,-385.765L-1803.39,-385.765 -1803.39,-415.052 -1774.11,-415.052 -1774.11,-385.765 -1803.39,-385.765 -1803.39,-356.484 -1832.68,-356.484 -1832.68,-385.765z" Stretch="Uniform" Fill="#FF3FA9F5" Width="16" Height="16" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5"> 
          <Path.RenderTransform> 
           <CompositeTransform ScaleY="1" ScaleX="1"/> 
          </Path.RenderTransform> 
         </Path> 
         <Ellipse x:Name="container" Fill="Transparent" Cursor="Hand" Height="32" Width="32"/> 
        </Grid> 
        <Border x:Name="ActiveLinkBorder" Width="32" Height="4" VerticalAlignment="Bottom" Opacity="0.5" Background="#FF3FA9F5" Visibility="Collapsed"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

唯一改變的部分是「元素」的路徑的數據。

有沒有辦法只使用一種基本風格,並改變其他路徑?

謝謝大家!

+0

可以在風格DataProperty集綁定,這將正常工作,如果你設置超鏈接按鈕的DataContext的。 – vinod8812

回答

0

您可以創建一個繼承它的基礎樣式。

這裏是一個很好的例子: basedOn Style

希望它可以幫助

+0

感謝Vinicius,但我不能使用這種方法,因爲我只有一個setter,它是用於模板的。但是我需要更改模板中的路徑,所以我不能使用基礎樣式,對嗎? – user1619456

+0

我花了最後一小時試圖做到這一點,但沒有成功。對不起。 – Vinicius

相關問題