如何访问位于listbox数据模板内部的控件?

4

你好,我有以下代码:

<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时,我可以使用"loaded"事件并将发送器转换为图像类型,但我不想那样做,因为我想在运行时绑定图像源。所以即使我们在"loaded"事件上尝试,也不会有帮助,因为控件还没有加载。
请帮忙,谢谢。 Subhen

所以你只是想避免类型转换? - Pierreten
不是那样,我想在运行时绑定图像源。因此,即使我们尝试在加载事件上绑定,由于控件未加载,这并不能帮助。 - Simsons
1个回答

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>

一旦您将文件夹对象集合绑定到 ListBoxItemsSource 上,它将使用转换器来将 Folder 对象转换为正确的 ImageSource 实例以显示一组图像。


嗨,这是我想要的,最初我的列表框将有不同的图像。一旦我点击其中一个图像(selectedItem),所选项目应更改为另一个图像。 - Simsons
@Subhen: “不同的图片”是什么意思?这组图片是由源数据中存在的URL确定的吗?或者有一个有限的静态图片集合,根据数据对象中的数据选择其中一张图片?同样,“另一张图片”是如何确定的? - AnthonyWJones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接