Silverlight WP7:更改选定列表框项目中项目的可见性

Silverlight WP7:更改选定列表框项目中项目的可见性,silverlight,windows-phone-7,Silverlight,Windows Phone 7,我有一个定义了以下数据模板的列表框: <DataTemplate x:Name="MyTemplate"> <StackPanel> <TextBlock Name="textblock1" Text="{Binding Name}" /> <TextBlock Name="textblock2" Text="{Binding SurName}" /> <StackPanel Name=

我有一个定义了以下数据模板的列表框:

<DataTemplate x:Name="MyTemplate">
    <StackPanel>
        <TextBlock Name="textblock1" Text="{Binding Name}" />
        <TextBlock Name="textblock2" Text="{Binding SurName}" />
        <StackPanel Name="extrainfo" Visibility="Collapsed">
            <TextBlock Name="textblock3" Text="{Binding Address}" />
            <TextBlock Name="textblock4" Text="{Binding Phone}" />
            <TextBlock Name="textblock5" Text="{Binding Email}" />
        </StackPanel>
    </StackPanel>
</DataTemplate>

列表框:

<ListBox Name="myListBox" ItemTemplate="{StaticResource MyTemplate}" ItemsSource="{Binding UserList}" />

问题如下:;当用户在列表框中选择一个项目时,我希望通过将stackpanel的可见性设置为visible来显示附加信息


有没有办法(通过xaml或c#)实现这一点?我试图改变故事板,但我没有用这种方法走多远。

创建一个
ItemContainerStyle
,它具有默认的
ContentControl
来显示
ItemTemplate
的内容,但也具有使用
可见性设置为
折叠的
定义的详细内容。然后,更新“选定的”
VisualState
,以便将详细信息面板的
可见性设置为
可见

<VisualState x:Name="Selected">
    <Storyboard>
       <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
                                      Storyboard.TargetName="ContentContainer">
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/>
       </ObjectAnimationUsingKeyFrames>
       <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                      Storyboard.TargetName="Details">
               <DiscreteObjectKeyFrame KeyTime="0" Value="Visibile"/>
       </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
...
<StackPanel>
    <ContentControl 
        x:Name="ContentContainer" 
        ContentTemplate="{TemplateBinding ContentTemplate}" 
        Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" 
        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
        Margin="{TemplateBinding Padding}" 
        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
    <Grid x:Name="Details">
        <!-- Put the content of your details panel here. -->
    </Grid>
</StackPanel>

...

听起来很有希望。你能详细说明一下怎么做吗。我尝试了此操作,但得到一个未处理的异常“无法解析Targetname详细信息”。您需要将
x:Name=“Details”
添加到
ItemContainerStyle
中控件模板中的元素中。我将更新上面的代码示例来说明这一点。+1这是一种合理的方法,可以通过使Xaml所属的样式和模板上下文变得更清晰来实现。