1

我正在开发一个 Windows 8 Metro 应用程序,其中包含一组文本块和一个图像的列表框。

<ListBox x:Name="lstbxbStudents" Background="Transparent"  ItemContainerStyleSelector="{StaticResource ItemStyleSelector}" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemTemplate="{StaticResource LandscapeItemTemplate}"   Height="476"    SelectionChanged="lstbxbProducts_SelectionChanged_1"  Style="{StaticResource ListBoxStyle1}" HorizontalAlignment="Left" Width="901">
</ListBox>

对于该图像 ImgCmt,我在列表框的数据模板内设置了静态图像的源。

<Page.Resources> 

    <CollectionViewSource x:Name="cvs2" IsSourceGrouped="true" />
    <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->
    <x:String x:Key="AppName">Students Screen</x:String>

    <DataTemplate x:Key="LandscapeItemTemplate" >
        <StackPanel Orientation="Horizontal">
            <StackPanel Width="30"></StackPanel>
            <StackPanel Width="120"  Orientation="Horizontal">
                <TextBlock Text="{Binding stunum}" VerticalAlignment="Center" HorizontalAlignment="Left" />
            </StackPanel>
            <StackPanel Width="350">
                <TextBlock Text="{Binding studsc}"   HorizontalAlignment="Left" />
            </StackPanel>
            <StackPanel Width="10"></StackPanel>
            <StackPanel   Width="100">
                <TextBlock Text="{Binding stuum}" x:Name="txtblkstuum"   HorizontalAlignment="Left" />
                </StackPanel>    
            <StackPanel Width="150">
                <TextBlock Text="{Binding stugrp}" VerticalAlignment="Center" TextAlignment="Right" HorizontalAlignment="Center" />
            </StackPanel>
            <StackPanel Width="100">
                <TextBlock Text="{Binding stusection, Mode=TwoWay}"  TextAlignment="Center" x:Name="txtbxbstusection" Tag="{Binding stunum}"     VerticalAlignment="Center"   HorizontalAlignment="Right" />
            </StackPanel>
            <StackPanel Width="50"></StackPanel>
            <StackPanel>
                <Image  Source="Assets/comments.png" Name="ImgCmt"  PointerPressed="Image_PointerPressed_1" VerticalAlignment="Center" Width="20" Height="20"></Image>
            </StackPanel>        
        </StackPanel>
    </DataTemplate>

</Page.Resources>

我的目标是我想在代码隐藏中将图像的源更改为不同的图像源(更改图像),因为我需要访问 Metro 应用程序中列表框数据模板中存在的控件?

我怎样才能做到这一点 :

  1. 如何访问 Metro 应用程序中列表框数据模板中存在的控件?

  2. 我可以通过哪些不同的方式来做到这一点?

  3. 如何根据某些条件在代码隐藏中将图像源更改为不同的图像源(更改图像)?

4

1 回答 1

3

这是一个常见的问题。我们都至少问过一次。问题是这些控件没有唯一的名称,因为它们位于转发器中。因此,您不能在 XAML 中使用逻辑树。逻辑树让您可以按名称命名事物。相反,您需要使用 XAML 中的可视化树。可视化树让您可以访问屏幕上的所有内容,包括装饰控件和填充中继器的动态渲染元素。因为可视化树很大,而且因为重复器会重复,所以您仍然必须限制可视化树的范围,以便您可以可靠地定位要查找的控件。我希望这是有道理的。

此处的解决方案:http: //blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

于 2013-07-25T08:07:25.880 回答