c# - 如何访问放置在列表框数据模板内的控件?

标签 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 时。我可以使用加载的事件并将发送者类型转换为图像类型,但我不希望那样,因为我想在运行时绑定(bind)期间绑定(bind)图像源。因此,即使我们尝试加载事件,也无济于事,因为控件不会被加载。

请帮忙。

谢谢, 子轩

最佳答案

您的问题中缺少相当多的细节,但无论如何我都会努力回答。它与回答您的问题非常不同,但它可能会帮助您了解添加问题以指导答案所需的详细信息。反过来,可以完善这个答案。经过一些迭代,您实际上可能会得出答案。

我猜你正在绑定(bind)到一组表示“文件夹”的对象,但你想根据每个对象的状态以编程方式修改所呈现的图像,例如某些 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>

将 Folder 对象集合绑定(bind)到 ListBox ItemsSource 后,它将使用转换器显示一组图像以转换 Folder 将对象指向正确的 ImageSource 实例。

关于c# - 如何访问放置在列表框数据模板内的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605199/

相关文章:

c# - 如何在 Silverlight 中创建带有图像背景和点击感的圆形按钮

c# - 如何让我的服务停止自动发布到 Windows 应用程序事件日志中

c# - 将可为 null 的 DateTime 绑定(bind)到 MaskedTextBox

wpf - 有没有办法让 Visual Studio 2010 记住我喜欢查看 xaml 文件的方式?

Silverlight:将 ItemsControl 中的项目宽度设置为 Stretch

c# - 未找到 VisualStateGroups?

silverlight - 将文本框的 DataContext 设置为 silverlight 中的当前类

c# - 如何在程序中进一步使用switch语句内分配的变量?

c# - 多个用户的 WCF 身份验证自定义用户名和密码验证器

c# - 是否有用于处理 Internet 上的大型数据集的设计模式?