2012-03-02 4 views
2

인터넷에서 멋진 유리 버튼에 대한 다음 템플릿을 발견했습니다. 당신이 버튼 배경에 대한 속성 설정이 볼 수 ,wpf 단추 템플릿의 배경색을 변경하십시오.

<Setter TargetName="border" Property="Background" Value="#FF000000" /> 

하지만 난 다른 값으로 혼합에서 변경할 경우, 버튼의 배경이 변경 증언 요구 무산 .. 나는 변경해야 이 템플릿을 사용하는 폼의 모든 버튼에 영향을주는 Setter 태그의 값 ... 이 템플릿을 사용하여 다른 버튼에 다른 배경을 부여하도록 코드를 어떻게 변경할 수 있습니까 ??

<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="#FFFFFFFF" 
       BorderThickness="0" 
       CornerRadius="4,4,4,4"> 
      <Border x:Name="border" 
        Background="#7F000000" 
        BorderBrush="#FF000000" 
        BorderThickness="1" 
        CornerRadius="4,4,4,4"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="0.507*" /> 
         <RowDefinition Height="0.493*" /> 
        </Grid.RowDefinitions> 
        <Border x:Name="glow" 
          Grid.RowSpan="2" 
          Width="Auto" 
          HorizontalAlignment="Stretch" 
          CornerRadius="4,4,4,4" 
          Opacity="0"> 
         <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 Offset="0" Color="#B28DBDFF" /> 
           <GradientStop Offset="1" Color="#008DBDFF" /> 
          </RadialGradientBrush> 
         </Border.Background> 
        </Border> 
        <ContentPresenter Grid.RowSpan="2" 
             Width="Auto" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" /> 
        <Border x:Name="shine" 
          Width="Auto" 
          Margin="0,0,0,0" 
          HorizontalAlignment="Stretch" 
          CornerRadius="4,4,0,0"> 
         <Border.Background> 
          <LinearGradientBrush StartPoint="0.494,0.028" EndPoint="0.494,0.889"> 
           <GradientStop Offset="0" Color="#99FFFFFF" /> 
           <GradientStop Offset="1" Color="#33FFFFFF" /> 
          </LinearGradientBrush> 
         </Border.Background> 
        </Border> 
       </Grid> 
      </Border> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsPressed" Value="True"> 
       <Setter TargetName="shine" Property="Opacity" Value="0.4" /> 
       <Setter TargetName="border" Property="Background" Value="#FF000000" /> 
       <Setter TargetName="border" Property="BorderBrush" Value="#FF000000" /> 
       <Setter TargetName="glow" Property="Visibility" 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> 

답변

1

당신은 바인딩을 사용 할 수 있습니다

<Setter TargetName="border" Property="Background" 
     Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Background}" /> 

이 방법, 당신은 개별적으로 각 버튼의 배경을 설정할 수 있으며, 세터에서 사용하는 배경은 버튼의 Background 속성에 바인딩됩니다.

<Button Background="Red" Content="First" /> 
<Button Background="Blue" Context="Second" /> 
대답에 대한
+0

안녕 감사합니다 ... 스피 예외가 갖는 { "표현 유형이 유효한 스타일 값이 아닙니다."} 내가이 문제를 어떻게 해결할 수 있습니까? – lebhero

+0

@lebhero 업데이트 된 답변보기 –

+0

고맙습니다 ... 템플릿에 이해할 수없는 것이 있다고 생각합니다. 배경을 누르면 버튼의 배경이 설정되지만, 버튼의 배경을 변경하려면 어떻게해야합니까? 누르기 전에? 템플릿의 배경 값을 직접 변경하면 버튼 색상이 변경되기 전에 버튼 색상이 변경되고 이것이 내가 원하는 것입니다. 어떻게하면 좋을까요? (버튼의 facecolor 변경) ?? Thankss – lebhero

관련 문제