0

私はここ数日、アイテムを保持している場合の前景アニメーション効果を取得しようと頭を悩ませてきました。

アイテム テンプレートは次のようになります。

<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...

この問題を解決するためのアプローチは何ですか?

4

1 に答える 1