2013-09-29 3 views
0

내가 항목을 유지하는 경우를 위해 멋진 전경 애니메이션 효과를 얻기 위해 시도에 몇 지난 일을 많이 내 머리를 작업했습니다.애니메이션 LongListSelectorItem 전경 윈도우 폰의 대기에

항목 템플릿은 다음과 같습니다

<DataTemplate> 
    <StackPanel toolkit:TiltEffect.IsTiltEnabled="True" Hold="OnLongListSelectorItemHold"> 
     <toolkit:ContextMenuService.ContextMenu> 
      <toolkit:ContextMenu> 
       <toolkit:MenuItem Header="edit" /> 
       <toolkit:MenuItem Header="delete" /> 
      </toolkit:ContextMenu> 
     </toolkit:ContextMenuService.ContextMenu> 
     <TextBlock x:Name="SubjectTextBlock" Text="{Binding Subject}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="Last modified :" Margin="15, 0, 5, 0" Foreground="LightGray" Style="{StaticResource PhoneTextNormalStyle}"/> 
      <TextBlock Text="{Binding LastModified}" Foreground="#989696" Style="{StaticResource PhoneTextNormalStyle}"/> 
     </StackPanel> 
    </StackPanel> 
</DataTemplate> 

나는 여러 방법을 시도,하지만 난 그들 중에서 결과를 얻을 관리하지 않았습니다.

나는 여러 예를 보여줍니다 this nice MSDN post 통해 온, 단, TextBlockDataTemplate 그래서 난 특정 제어 접근에 문제가 내부에 내가 TextBlock의 참조, 애니메이션을 적용 할 전경 때문에 그들 중 누구도 정말 내 사건과 일치 할 수 없었다 템플릿 안쪽.

<phone:PhoneApplicationPage.Resources> 
    <Storyboard x:Name="ItemHoldAnimation"> 
     <ColorAnimation Storyboard.TargetName="SubjectTextBlock" 
         Storyboard.TargetProperty="Foreground" 
         From="White" To="{StaticResource PhoneAccentColor}" Duration="0:00:04"/> 
    </Storyboard> 
</phone:PhoneApplicationPage.Resources> 

그리고 다음 Hold 이벤트 핸들러에서 그것을 발사 : TargetName="SubjectTextBlock" 액세스 할 수없는 때문에이 내부에 있기 때문에

var storyboard = Resources["ItemHoldAnimation"] as Storyboard; 
storyboard.Begin(); 

그러나 실패

예를 들어, 나는이 방법을 시도 DataTemplate ...

나는 WPF에서 발견 한 접근법을(3210)는 다음과 같이 다음 LongListSelector 항목이 개최 때 많은 단지 글꼴을 애니메이션하기

MS.Internal.WrappedException: Error HRESULT E_FAIL has been returned from a call to a COM component. ---> System.Exception: Error HRESULT E_FAIL has been returned from a call to a COM component. 

<StackPanel toolkit:TiltEffect.IsTiltEnabled="True" Hold="OnLongListSelectorItemHold"> 
    <StackPanel.Triggers> 
     <EventTrigger RoutedEvent="StackPanel.Hold"> 
      <BeginStoryboard Storyboard="{StaticResource ItemHoldAnimation}"/> 
     </EventTrigger> 
    </StackPanel.Triggers> 
    ... 
</StackPanel> 

있지만 COM 예외를 제공은 ...

접근 무엇입니까 이 문제를 해결 하시겠습니까?

답변

3

당신은 DataTemplate을 내 스토리 보드, 또한 대상 proeprty의 필요성을 정의해야 수정할 수하기 때문에 컬러 속성이 아닙니다 브러시에 ColorAnimation의 작업. 마지막으로 IsZoomEnabled="False" 그렇지 않으면의 ContextMenu 구현이 요소의 스냅 샷을하고 애니메이션이 표시되지 않도록 상황에 맞는 메뉴가 열려있는 동안이 정적 이미지를 표시하기 때문에도 설정해야합니다 (대안은 지연의 ContextMenu의 소스 코드를 수정하는 것입니다

<DataTemplate x:Key="dataTemplate"> 
     <StackPanel toolkit:TiltEffect.IsTiltEnabled="True" Hold="OnLongListSelectorItemHold"> 
      <StackPanel.Resources> 
       <Storyboard x:Name="ItemHoldAnimation"> 
        <ColorAnimation Storyboard.TargetName="SubjectTextBlock" 
        Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" 
        From="White" To="{StaticResource PhoneAccentColor}" Duration="0:00:04"/> 
       </Storyboard> 
       <Storyboard x:Name="MenuClosedAnimation"> 
        <ColorAnimation Storyboard.TargetName="SubjectTextBlock" 
       Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" 
       From="{StaticResource PhoneAccentColor}" To="White" Duration="0:00:04"/> 
       </Storyboard> 
      </StackPanel.Resources> 
      <toolkit:ContextMenuService.ContextMenu> 
       <toolkit:ContextMenu IsZoomEnabled="False" Closed="ContextMenu_OnClosed"> 
        <toolkit:MenuItem Header="edit" /> 
        <toolkit:MenuItem Header="delete" /> 
       </toolkit:ContextMenu> 
      </toolkit:ContextMenuService.ContextMenu> 
      <TextBlock x:Name="SubjectTextBlock" Text="Test" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Last modified :" Margin="15, 0, 5, 0" Foreground="LightGray" Style="{StaticResource PhoneTextNormalStyle}"/> 
       <TextBlock Text="{Binding LastModified}" Foreground="#989696" Style="{StaticResource PhoneTextNormalStyle}"/> 
      </StackPanel> 
     </StackPanel> 
    </DataTemplate> 

을 여기에 홀드 방법 : 애니메이션 후 상황에 맞는 메뉴의 개방이 같은 뭔가 작동합니다) 수행

private void OnLongListSelectorItemHold(object sender, GestureEventArgs e) 
    { 
     FrameworkElement fe = sender as FrameworkElement; 
     var storyboard = fe.Resources["ItemHoldAnimation"] as Storyboard; 
     storyboard.Begin(); 
    } 

private void ContextMenu_OnClosed(object sender, RoutedEventArgs e) 
    { 
     ContextMenu eleme=sender as ContextMenu; 
     FrameworkElement fe = eleme.Owner as FrameworkElement; 
     var storyboard = fe.Resources["MenuClosedAnimation"] as Storyboard; 
     storyboard.Begin(); 
    } 
+0

대답 주셔서 대단히 감사합니다! 그래서 처음에는 일종의 옳은 길에 있었지만 다른 구현 방법과 잃어버린 길을 살펴 보았습니다. 고맙습니다! – VasileF

+0

위대한 답변! 하지만 컨텍스트 메뉴가 닫힌 후에 어떻게 색을 없앨까요? – Silva

+0

@ Silva 그냥 내 대답을 업데이트했습니다 –

관련 문제