本文介绍了如何修改Silverlight组合框数据显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个组合框,定义如下:
<ComboBox x:Name="cboDept" Grid.Row="0" Margin="8,8,8,8" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Source={StaticResource cvsCategories}}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Width="Auto" Height="Auto">
<sdk:Label Content="{Binding CategoryID}" Height="20" />
<sdk:Label Content="{Binding CategoryName}" Height="20" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
它工作得很好。但是,一旦我在列表中选择了一项,我希望将不同的模板应用于向用户显示的组合框中选定的项(弹出窗口消失后显示的项)。在上面的例子中,一旦我选择了相应的项,我只希望CategoryName显示在ComboBox中。
有人能告诉我如何实现这一点吗?
谢谢
推荐答案
您需要做的是自己创建一个包含一些已定义模板的资源字典。在下面的代码中,ComboBoxTemplateOne和ComboBoxTeplateTwo是设置为在庄园中显示组合框的用户控件。
<UserControl.Resources>
<ResourceDictionary>
<DataTemplate x:Key="TemplateOne">
<local:ComboBoxTemplateOne />
</DataTemplate>
<DataTemplate x:Key="TemplateTwo">
<local:ComboBoxTemplateTwo />
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
然后您需要创建自己的类,该类继承自Content Control"DataTemplateSelector",重写OnContent Changed
Protected Overrides Sub OnContentChanged(ByVal oldContent As Object, ByVal newContent As Object)
MyBase.OnContentChanged(oldContent, newContent)
Me.ContentTemplate = SelectTemplate(newContent, Me)
End Sub
然后,您需要创建从上面的DataTemplateSelector继承的另一个类,该类覆盖SelectTemplate("TemplateSelectorClass"),后者将返回上面定义的DataTemplate("TemplateOne"或"TemplateTwo")。此外,在这个派生类中,您还需要为您拥有的每个模板定义一个属性Public Property ComboboxTemplateOne As DataTemplate
然后返回到您的XAML并打开XAML
<local:TemplateSelectorClass ComboboxTemplateOne="{StaticResource TemplateOne}" Content="{Binding Path=ActiveWorkspace}>
这应该是可行的,因为它实际上与在WPF中设置"DataTemplate"属性(这在Silverlight中不存在)执行相同的工作我知道这里有相当多的步骤,而且相当繁琐,但希望这能让你做到这一点。任何问题都要大声喊出来。 这篇关于如何修改Silverlight组合框数据显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!