Mat*_*ias 0 xaml windows-runtime winrt-xaml
在WinRT XAML中,我有一个ComboBox
显示一些复杂项目.
是否可以声明并绑定两个不同的项模板:1)"普通"选定项目(ComboBox已关闭)和2)当用户想要选择另一个项目(ComboBox已打开)时弹出窗口中的列表?
我发现ItemTemplate
两者兼而有之,但如果用户想要选择其他项目,我想显示具有略微不同模板的项目.
使用项目模板选择器.在Selector类中定义两个属性SelectedTemplate和DropDownTemplate.检查容器是否包含在ComboboxItem中.如果是,请选择DropDownTemplate.如果没有选择SelectedTemplate.
public class ComboBoxItemTemplateSelector : DataTemplateSelector
{
public DataTemplate SelectedTemplate { get; set; }
public DataTemplate DropDownTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var comboBoxItem = container.GetVisualParent<ComboBoxItem>();
if (comboBoxItem == null)
{
return SelectedTemplate;
}
return DropDownTemplate;
}
}
public static class DependencyObjectExtensions
{
public static T GetVisualParent<T>(this DependencyObject child) where T : FrameworkElement
{
while ((child != null) && !(child is T))
{
child = VisualTreeHelper.GetParent(child);
}
return child as T;
}
}
Run Code Online (Sandbox Code Playgroud)
XAML中的ComboBox,
<Page.Resources>
<local:ComboBoxItemTemplateSelector x:Key="selector">
<local:ComboBoxItemTemplateSelector.DropDownTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ID}"/>
<TextBlock Text="{Binding Name}" Margin="5 0 0 0"/>
</StackPanel>
</DataTemplate>
</local:ComboBoxItemTemplateSelector.DropDownTemplate>
<local:ComboBoxItemTemplateSelector.SelectedTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</local:ComboBoxItemTemplateSelector.SelectedTemplate>
</local:ComboBoxItemTemplateSelector>
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ComboBox x:Name="combo"
ItemTemplateSelector="{StaticResource selector}">
</ComboBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1062 次 |
最近记录: |