1

次のようなカスタム テンプレートで ListView を使用しています。

<ListView.ItemTemplate>
    <DataTemplate>
        <Grid HorizontalAlignment="Center" Width="220" Height="220">
            <Image x:Name="image" Stretch="UniformToFill" 
                    Source="{Binding Brand.Image, 
                             ConverterParameter=transparent, 
                             Converter={StaticResource LogoToUriConverter}}"/>
            <StackPanel VerticalAlignment="Bottom">
                <TextBlock Text="{Binding Name}" 
                            Foreground="{StaticResource ApplicationColor}" 
                            Style="{StaticResource TitleTextStyle}" 
                            Height="30" Margin="15,0,15,0"/>
                <TextBlock Text="{Binding Name}" 
                            Foreground="{StaticResource ApplicationColor}" 
                            Style="{StaticResource CaptionTextStyle}" 
                            TextWrapping="NoWrap" Margin="15,0,15,10"/>
            </StackPanel>
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

アイテムが選択されたときに、選択したアイテムの画像ソースを新しいものに変更したいと思います。

Brand.Image は、外部の DataObject から取得されるため、DependencyProperty ではありません。

したがって、WPFではトリガーを使用して手動で変更できると思います。

しかし、winRTではもう機能しないので、VSMを調べましたが、どうすればそれを達成できるかわかりません。

誰かが私にそれをどのように行うことができるかの実際の例を提供できますか?

ありがとうございました

4

2 に答える 2

0

私はこれをトリッキーな方法で解決することができましたが、うまくいきました:

  1. ExtendedVisualStateManagerを使用します(ExpressionBlend dllを介して.NETで使用できましたが、WinRTでは使用できなかったため、http://nroute.codeplex.com/SourceControl/changeset/69480#nRoute5/nRoute.Framework.Metroから入手しました。 /Components/ExtendedVisualStateManager.cs

  2. それを持っているので、OnSelectedイベントをキャッチし、新しいVisualStateManagerを使用してそれを行います。

    ExtendedVisualStateManager.GoToElementState(sender as Grid、 "Selected2"、true);

ItemTemplateの完全なXAMLは次のとおりです。

<DataTemplate>
<Grid x:Name="ItemGrid" HorizontalAlignment="Center" Width="220" Height="220" PointerPressed="GridItemTapped">
    <Image x:Name="image" Stretch="UniformToFill" Source="{Binding Brand.Name, ConverterParameter=white, Converter={StaticResource LogoToUriConverter}}"/>
    <Image x:Name="image_colored" Stretch="UniformToFill" Visibility="Collapsed" Source="{Binding Brand.Name, ConverterParameter=colored, Converter={StaticResource LogoToUriConverter}}"/>
    <StackPanel VerticalAlignment="Bottom">
        <TextBlock Text="{Binding Name}" Foreground="White" Style="{StaticResource TitleTextStyle}" Height="30" Margin="15,0,15,0"/>
        <TextBlock Text="{Binding Name}" Foreground="White" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
    </StackPanel>
    <VisualStateManager.CustomVisualStateManager>
        <vsm:ExtendedVisualStateManager/>
    </VisualStateManager.CustomVisualStateManager>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="SelectionStates">
            <VisualState x:Name="Selected2">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="image" Storyboard.TargetProperty="Visibility">
                        <DiscreteObjectKeyFrame KeyTime="00:00:00.0000000">
                            <DiscreteObjectKeyFrame.Value>
                                Collapsed
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="image_colored" Storyboard.TargetProperty="Visibility">
                        <DiscreteObjectKeyFrame KeyTime="00:00:00.0000000">
                            <DiscreteObjectKeyFrame.Value>
                                Visible
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

これが同じ問題を抱えている人の助けになることを願っています。

WinRTで同じ結果を達成するためのより良い、より簡単な方法がある場合は、ソリューションを提示してください。

ありがとうございました

于 2013-02-01T00:16:49.677 に答える