2010-01-19 165 views
0

我有以下控件模板:訪問控制模板屬性

<ControlTemplate x:Key="GlassButton" TargetType="{x:Type Button}"> 
     <ControlTemplate.Resources> 
      <Storyboard x:Key="Timeline1"> 
       <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> 
        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
      <Storyboard x:Key="Timeline2"> 
       <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> 
        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
     </ControlTemplate.Resources> 
     <Border BorderBrush="#FFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4"> 
      <Border x:Name="border" Background="#7F0000" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="0.507*"/> 
         <RowDefinition Height="0.493*"/> 
        </Grid.RowDefinitions> 
        <Border Opacity="0" HorizontalAlignment="Stretch" x:Name="glow" Width="Auto" Grid.RowSpan="2" CornerRadius="4,4,4,4"> 
         <Border.Background> 
          <RadialGradientBrush> 
           <RadialGradientBrush.RelativeTransform> 
            <TransformGroup> 
             <ScaleTransform ScaleX="1.702" ScaleY="2.243"/> 
             <SkewTransform AngleX="0" AngleY="0"/> 
             <RotateTransform Angle="0"/> 
             <TranslateTransform X="-0.368" Y="-0.152"/> 
            </TransformGroup> 
           </RadialGradientBrush.RelativeTransform> 
           <GradientStop Color="#B28DBDFF" Offset="0"/> 
           <GradientStop Color="#008DBDFF" Offset="1"/> 
      </RadialGradientBrush> 
         </Border.Background> 
        </Border> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" Grid.RowSpan="2"/> 
        <Border HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="shine" Width="Auto" CornerRadius="4,4,0,0"> 
         <Border.Background> 
          <LinearGradientBrush EndPoint="0.494,0.889" StartPoint="0.494,0.028"> 
           <GradientStop Color="#99FFFFFF" Offset="0"/> 
           <GradientStop Color="#33FFFFFF" Offset="1"/> 
      </LinearGradientBrush> 
         </Border.Background> 
        </Border> 
       </Grid> 
      </Border> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsPressed" Value="True"> 
       <Setter Property="Opacity" TargetName="shine" Value="0.4"/> 
       <Setter Property="Background" TargetName="border" Value="#CC000000"/> 
       <Setter Property="Visibility" TargetName="glow" Value="Hidden"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource Timeline1}"/> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
        <BeginStoryboard x:Name="Timeline2_BeginStoryboard" Storyboard="{StaticResource Timeline2}"/> 
       </Trigger.ExitActions> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

現在,我想這個模板應用到一些不同的按鈕。不過,我希望每個按鈕的背景顏色都不相同。我期待改變每個按鈕控件模板的屬性是邊界

<Border x:Name="border" Background="#7F0000"> 

我需要能夠爲這樣的背景設置不同的值的背景。將其設置爲

<Button Background="Yellow" Template="{DynamicResource GlassButton}"> 

不起作用。

任何想法?

謝謝。

回答

1

Border元素要應用背景,將其綁定如下:

<Border x:Name="border" Background="{TemplateBinding Background}"... 
+0

大,這就像一個魅力。在相關的說明中,是否有可能使用輝光和閃光邊框的漸變停止顏色做類似的事情?我的意思是,是否也可以通過應用此模板的單個按鈕來控制? – Flack 2010-01-19 21:02:25

+0

漸變停止等基本上是另一個你希望在你的模板中使用另一個元素(除了我們已經看到的邊框)。由於'Button'上沒有兩個'Background'屬性,因此沒有可用的畫筆類型屬性來綁定其他元素的背景。你需要創建一個自定義的控件,並且聲明一些額外的依賴屬性。 – 2010-01-19 21:22:40