2012-01-06 2 views
0

Expression Blend를 사용하여 개체의 테두리 색을 애니메이션으로 적용하려고합니다.브러시 리소스를 사용하여 Expression Blend에서 개체의 테두리를 애니메이션으로 만들 수 없습니다.

스토리 보드 내에서 테두리 값을 이전에 만든 브러시 리소스의 테두리 값으로 변경할 때마다 개체의 기본 테두리가 애니메이션 대신 변경됩니다. 속성 값을 기본 값으로 변경하면 (예 : 브러시 리소스를 사용하지 않음) 의도 한대로 애니메이션이 작동합니다.

브러시 리소스를 사용하여 색상 속성을 활성화 할 수 없습니까?

<Style x:Key="StandardTextBoxStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}"> 
    (...) 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBox}"> 
       <Grid x:Name="grid"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
         (...) 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="FocusStates"> 
          <VisualStateGroup.Transitions> 
           <VisualTransition GeneratedDuration="0" To="Focused"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle"> 
              <EasingColorKeyFrame KeyTime="0" Value="#FFC2C2C2"/> 
              <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FF5FA5C9"/> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualTransition> 
          </VisualStateGroup.Transitions> 
          <VisualState x:Name="Unfocused"/> 
          <VisualState x:Name="Focused"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        (...) 
</Style> 

어떻게 : 여기

국경에 대한 하드 코딩 된 색상 값을 사용하는 경우 (이 코드는 애니메이션이 제대로 재생, 작동하지만 경계의 값을 하드 코딩) 익스프레션 블렌드에 의해 생성 된 코드입니다 하드 코딩 된 값 # FF5FA5C9를 로컬 브러시 리소스의 값으로 바꿉니 까? Value = "# FF5FA5C9"문을 DynamicResource/StaticResource 문으로 대체해야합니까?

+0

몇 가지 코드를 공유해 주시겠습니까? – Divya

답변

2

브러시 리소스에 애니메이션을 적용하는 대신 다른 사각형의 모양을 만들고 Rectangle_Focused와 같은 이름을 지정하고 기존 사각형 위에 순서대로 배치하여 원본 위에 표시되도록하는 것이 좋습니다 구형.

테두리 브러시 리소스를이 셰이프에 추가 한 다음 셰이프 표시를 축소하도록 설정하십시오. 그런 다음 초점이 맞춰 진 상태 또는 마우스 오버 상태 또는 원하는대로 표시 여부를 다시 표시로 변경합니다. 종류의 좋아.

<VisualState x:Name="Focused"> 
            <Storyboard> 
             <DoubleAnimation Duration="0:0:0.1" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="FocusVisualElement" d:IsOptimized="True"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="MouseOverBorder" d:IsOptimized="True"/> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Background_Copy"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Visible</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 

망가 왜 나 한테 물어,하지만 같은 객체 그냥 잘라 나던에서 브러시 리소스에 애니메이션,하지만 당신은 이런 생각에 대해 당신이 찾고있는 동일한 효과를 달성 할 수있다.

+0

Chris 님, 정말 영리한 해결책입니다! Color 리소스를 통해 Brush 리소스를 사용하면 장점이 있습니까? (내 대답 참조). 실제로 브러시 리소스를 사용하여 애니메이트 할 수없는 것은 이상한 일입니다. –

+1

브러시 리소스를 사용하면 선형 또는 방사형 그래디언트와 같은 더 나은 시각적 효과를 얻을 수 있습니다. 솔리드 컬러로만 제한됩니다.따라서 디자인에 따라 많은 경우 브러시 리소스에 계속 액세스 할 수 있습니다. –

+0

의미심장, 다시 한 번 감사합니다 :) –

1

나는이 문제를 발견했다고 생각합니다. 애니메이션의 스토리 보드에 키 프레임을 생성하지 않는 로컬 브러쉬 자원과 뇌졸중의 값을 할당 몇 가지 이유를 들어

: 여기

당신이하지 말아야 할 작업은 다음과 같습니다

http://i.imgur.com/5X7Xm.jpg

대신 로컬 리소스를 만들어 다음과 같이 지정해야합니다.

http://i.imgur.com/UGIOl.jpg

스토리 보드의 키 프레임이 제대로 만들어지고 애니메이션이 작동합니다.

Expression Blend의 버그가있을 수 있습니까? 이것이 제대로 작동합니까? 생각 안남 :)

+0

이것은 다른 모양을 과도하게 혼합하는 것보다 나은 해결책입니다. EB가 곧 "브러쉬 키 프레임"을 지원할 수있게 해 주실 것을 감사드립니다. – kneo