2013-02-28 54 views
0

我正在使用现有的代码。这件事有一个ComboBox与几个ComboBoxItems。每个项目都有一个StackPanel,里面有一个Image控件和一个TextBlock。使用DataTemplate在ComboBox中绑定图像

现在,Image控件的source属性设置为存储在XAML文件中的不同矢量图像,而TextBlock的Text属性设置为本地化字符串。

我想通过使用DataTemplate单​​独使用ComboBoxItems来实现此目的。我可以为TextBlock创建一个字符串列表,但我无法弄清楚如何将图像绑定到各自的图像控件。

我接受任何其他更好的解决方案。另外,如果您认为正确的做法是现有的,请告诉我。

这可能是一个重复的问题,但我找不到满足我的问题的问题。 如果是,则指向其他问题的链接就足够了。

编辑:代码添加

<ComboBox x:Name="imageInfoLevelsComboBox" SelectedIndex="1" 
      Style="{DynamicResource ComboBoxToolBarStyle}" 
      Margin="6,6,6,0" Width="50" 
      ToolTip="{x:Static Viewing:ViewingTexts.ImageInformationLevels}" 
      SelectionChanged="OnImageInfoLevelsComboBoxSelectionChanged" > 
    <ComboBoxItem x:Name="showAllComboBoxItem" 
        Style="{DynamicResource ComboBoxItemToolBarStyle}"> 
     <StackPanel Orientation="Horizontal"> 
      <Image x:Name="ImageInfoAllImage" 
        Source="{StaticResource ImageInfoFullIcon}" 
        Margin="0,0,4,0" 
        Width="24" Height="24"/> 
      <TextBlock 
       Text="{x:Static Viewing:ViewingTexts.ImageInformationFull}" 
       Margin="10,0,0,0" 
       VerticalAlignment="Center"/> 
     </StackPanel> 
    </ComboBoxItem> 
    <ComboBoxItem x:Name="showImportantComboBoxItem" 
     Style="{DynamicResource ComboBoxItemToolBarStyle}"> 
     <StackPanel Orientation="Horizontal"> 
      <Image x:Name="ImageInfoImportantImage" 
        Source="{StaticResource ImageInfoLimitedIcon}" 
        Margin="0,0,4,0" 
        Width="24" Height="24"/> 
      <TextBlock 
       Text="{x:Static Viewing:ViewingTexts.ImageInformationIntermediate}" 
         Margin="10,0,0,0" 
         VerticalAlignment="Center"/> 
     </StackPanel> 
    </ComboBoxItem> 
    <ComboBoxItem x:Name="showNotificationsComboBoxItem" 
     Style="{DynamicResource ComboBoxItemToolBarStyle}"> 
     <StackPanel Orientation="Horizontal"> 
      <Image x:Name="ImageInfoNotificationsImage" 
       Source="{StaticResource ImageInfoNoneIcon}" 
       Margin="0,0,4,0" Width="24" Height="24"/> 
      <TextBlock Text="{x:Static Viewing:ViewingTexts.ImageInformationNone}" 
         Margin="10,0,0,0" VerticalAlignment="Center"/> 
     </StackPanel> 
    </ComboBoxItem> 
</ComboBox> 

我想我可以做的就是创建一个类有2个对象,字符串类型之一,另一个为图像。然后创建一个列表并将其与组合框绑定,但问题是我无法确定如何将矢量图像用作对象。

谢谢。

+0

请查看现有的XAML – mathieu 2013-02-28 10:56:11

+0

@mathieu结合 - 发布供大家参考代码。 – 2013-02-28 11:48:17

回答

1

我认为你需要绑定一个至少有两个属性的对象列表,而不仅仅是一个字符串列表。一个属性将包含文本块的字符串,另一个属性将是该图像的一个源。

参考此链接的实例,urisource定义Wpf - relative image source path

+0

这听起来像它应该工作,但如果你看到我发布的代码,图像绑定到StaticResource。这仍然有效吗? – 2013-02-28 11:36:18

+0

我没有注意到你如何定义你的静态资源,但如果它们在你的项目中,你可以看看这个链接,看看如何从代码设置urisource http://stackoverflow.com/questions/4524066/absolute-urisource -of-a-resource-image – failedprogramming 2013-02-28 11:43:30

+0

好的,我刚刚看到你对于因素图像的评论。我认为你可以使用查找资源从代码访问静态资源,但我从来没有尝试过。如果有关何时显示哪个图像的规则,则可以使用数据触发器来实现此目的。您可能在对象中有第三个属性,它决定绑定哪个图像,并使用数据触发器来更改绑定。这里是一个关于数据触发器的例子http://stackoverflow.com/questions/1786477/change-image-using-trigger-wpf-mvvm。需要注意的是,在示例中,您需要将该值绑定到静态资源而非urisource – failedprogramming 2013-02-28 11:58:39