私はここ数日、アイテムを保持している場合の前景アニメーション効果を取得しようと頭を悩ませてきました。
アイテム テンプレートは次のようになります。
<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>
私は複数のアプローチを試みましたが、それらのいずれからも結果を得ることができませんでした。
複数の例を示すこの素敵な MSDN の投稿に出くわしましたがTextBlock
、アニメーション化したいフォアグラウンドTextBlock
が a 内で s を参照しているDataTemplate
ため、テンプレート内の特定のコントロールにアクセスする際に問題があるため、実際には私のケースと一致するものはありませんでした。
たとえば、私はこのアプローチを試しました:
<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
イベント ハンドラから起動するには:
var storyboard = Resources["ItemHoldAnimation"] as Storyboard;
storyboard.Begin();
しかし、TargetName="SubjectTextBlock"
内部にあるためアクセスできないため失敗しますDataTemplate
...
次のように、WPF で見つけたアプローチも試しましたEventTriggers
。
<StackPanel toolkit:TiltEffect.IsTiltEnabled="True" Hold="OnLongListSelectorItemHold">
<StackPanel.Triggers>
<EventTrigger RoutedEvent="StackPanel.Hold">
<BeginStoryboard Storyboard="{StaticResource ItemHoldAnimation}"/>
</EventTrigger>
</StackPanel.Triggers>
...
</StackPanel>
しかし、COM例外が発生します...
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.
アイテムがホールドされているときにフォントをアニメーション化するだけでたくさんLongListSelector
...
この問題を解決するためのアプローチは何ですか?