0

我有一个列表框,在那个项目模板里面,在那个数据模板里面(像往常一样)。我的目标是 - 在列表框选择更改事件中,我想将列表框选定项绑定到图像控件 - 我的代码是 -

ListBox lb = (ListBox)sender;

ListBoxItem item = (ListBoxItem)lb.SelectedItem;

Image im = (Image)item.Content;
Image1.Source = new BitmapImage(((BitmapImage)im.Source).UriSource);

我的ListBox.ItemTemplate样子是这样的:

<ListBox Name="imageList" Height="556" Width="130" HorizontalAlignment="Left" Style="{StaticResource ListBoxStyle1}" SelectionChanged="imageList_SelectionChanged" >
   <ListBox.ItemTemplate>
      <DataTemplate>
         <Image Source="{Binding Imgs}" Width="100" Height="100"/>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

但它显示异常。Image1是我的图像控件,我不想在 xaml 中绑定图像源。我有一些特定的要求。

4

1 回答 1

0

你有例外,因为当你 bind 时ListBox,我假设你这样做,或者任何ItemsControl类似的属性,像Items, SelectedItemandSelectedItems将是一种绑定列表项而不是 not ListBoxItem,它只是一个容器。如果您需要ListBoxItem这样引用它:

var listBox = sender as ListBox;
var lbi = (ListBoxItem)listBox
                         .ItemContainerGenerator
                         .ContainerFromItem(listBox.SelectedItem)

但是,如果您Image是其中的一部分,DataTemplate那将不像获得那么容易Content。再次它将是一种绑定项目,基本上指向与 相同SelectedItem。也许您可以使用它,否则您需要引用VisualTreeHelper默认情况下在可视化树中将有其他控件在ListBoxItem您的DataTemplate Image. 我不明白你不想绑定Image.Source,但为什么不绑定回来ListBox.SelectedItem,然后你可以引用你的对象。

如果你想Image1.SourceSelectedItem图像更新,那么你的SelectionChange方法应该是这样的:

Image1.Source = ((sender as ListBox).SelecteItem as img).Imgs;
于 2013-05-26T08:03:45.060 回答