如何访问列表框数据模板中的控件?

时间:2010-04-09 05:10:08

标签: c# silverlight silverlight-3.0 listbox datatemplate

您好我有以下代码:

<ListBox x:Name="foldersListBox" Grid.Column="0" MouseLeftButtonUp="foldersListBox_MouseLeftButtonUp" 


                             BorderThickness="0"  Height="AUTO" 
                             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                             ScrollViewer.VerticalScrollBarVisibility="Disabled">
                        <DataTemplate>
                            <Border BorderBrush="LightGray"
                            BorderThickness="2"
                            CornerRadius="4">
                                <Image x:Name="folderImage" Width="70" Height="70" Margin="3" />
                            </Border>
                        </DataTemplate>
</ListBox>

现在,当我尝试从后面的代码访问folderImage时。我可以使用加载的事件并将发送者作为图像类型进行类型转换,但我不希望这样,因为我想在运行时绑定期间绑定图像源。因此,即使我们将尝试加载事件,因为控件不会被加载,因此无法提供帮助。

帮助PLZ。

谢谢, Subhen

1 个答案:

答案 0 :(得分:1)

你的问题中有很多细节遗漏,但无论如何我都要去解答。它与回答您的问题非常不同,但它可能会帮助您了解添加问题以指导答案所需的详细信息。反过来,这个答案可以改进。有些迭代可能会让你真正得到答案。

我猜你是绑定到一组代表“文件夹”的对象,但你想要以编程方式修改所呈现的图像,具体取决于每个对象的状态,例如某些FolderType属性。

解决方法是使用值转换器,如果您的图像来自有限集。

public class FolderToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Folder folder = value as Folder;
        ImageSource result;
        // Logic to determine which ImageSource to use for a folder.
        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在看一下这个XAML: -

<Grid x:Name="LayoutRoot">
    <Grid.Resources>
       <local:FolderToImageConverter x:Key="ImageConverter" />
    </Grid.Resources>
    <ListBox x:Name="foldersListBox">
        <ListBox.ItemTemplate>
             <DataTemplate> 
                <Border BorderBrush="LightGray" BorderThickness="2" CornerRadius="4"> 
                  <Image Source="{Binding Converter={StaticResource ImageConverter}}" Width="70" Height="70" Margin="3" /> 
                </Border> 
             </DataTemplate> 
        </ListBox.ItemTemplate>
    </ListBox> 
</Grid>

将文件夹对象集合绑定到ListBox ItemsSource后,它会显示一组图像,使用转换器将Folder对象转换为正确的{{1}实例。