我正在尝试从静态资源绑定组合框(在代码后面添加)并在每个项目旁边添加图像。我到目前为止的最佳解决方案如下:
<ComboBox x:Name="cmbGroup"
Width="150" Height="32" ItemsSource="{StaticResource Groups}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Source="Question.jpg" Height="30" MouseEnter="Image_MouseEnter" ></Image>
<ComboBoxItem Content="{Binding Source={StaticResource Groups}}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
这不起作用,虽然我可以看到每个项目上的图像,但是文本,我得到了一个“Systems.Collection.GenericList”。任何想法如何解决这个问题?感谢
答案 0 :(得分:0)
我猜你的“群组”是一个列表?
因此,您将模板配置为显示图像,默认情况下配置对象组。 因此它显示您的组对象:即组的toString(),对于List,为“Systems.Collection.GenericList”。
我的猜测是你绑定了坏事?您希望绑定列表中的项目,该项目应该具有更合适的toString()版本。
假设您的群组列表中有一些用户项目。因此,您的绑定应如下所示:
<ComboBox x:Name="cmbGroup"
Width="150" Height="32" ItemsSource="{StaticResource Groups}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Source="Question.jpg" Height="30" MouseEnter="Image_MouseEnter" ></Image>
<ComboBoxItem Content="{Binding Source={StaticResource Users}}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
希望有所帮助
答案 1 :(得分:0)
当您在datatemplate中使用Binding控件时,它将绑定到ItemsSource集合中的每个项目。此外,如果您只想显示字符串,可以使用TextBlock控件而不是ComboboxItem。所以,如果您的代码如下:
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Source="Question.jpg" Height="30" MouseEnter="Image_MouseEnter" ></Image>
<TextBlock Text="{Binding}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
我认为你会达到你想要的效果。 希望这会有所帮助。