2010-04-09 29 views
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后面。我可以使用加载的事件和类型转换发件人作为图像类型,但我不想那样,因为我想在运行时绑定绑定图像源。所以,即使我们会尝试加载事件,但由于控件不会被加载,所以它不会起作用。

帮助PLZ。

感谢, Subhen

+0

所以你只是想避免演员? – Pierreten 2010-04-09 05:18:03

+0

不是这样,但我想在运行时绑定期间绑定图像源。所以,即使我们会尝试加载事件,但由于控件不会被加载,所以它不会起作用。 – Simsons 2010-04-09 05:29:57

回答

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实例。

+0

嗨,这是我想要的,最初我的列表框会有不同的图像。一旦我点击其中一个图像(selectedItem),选定的项目就会变成另一个图像。 – Simsons 2010-04-10 08:09:58

+0

@Subhen:“不同的图像”精心制作?这组图像是由源数据中存在的URL决定的?或者,根据数据对象中的数据选择静态列出的一组可能的图像?同样的“另一个形象”是如何确定的? – AnthonyWJones 2010-04-10 14:07:52

相关问题