繁体   English   中英

SelectedItem和Silverlight ComboBox的ItemTemplate的不同UI

[英]Different UI for the SelectedItem and the ItemTemplate for Silverlight ComboBox

基本上,我只是在SL3 ComboBox中寻找“ SelectedItemTemplate”。 不幸的是,这并不存在。

我想要的是SelectedItem看起来像这样:值

下拉框中的项目如下所示:值+附加信息

使用ItemTemplate可以很容易地完成后者,但是SelectedItem看起来也是如此。 我该如何预防/修复该问题?

您可以通过创建自己的SelectionBoxItemTemplate附加属性,然后为ComboBox定义一个新的样式/控件模板来做到这一点,该模板将在内容演示器中的选择框区域中使用该模板。

这是一个合适的附加属性:

public class ComboBoxExt
{
    public static DataTemplate GetSelectionBoxItemTemplate(DependencyObject obj)
    {
        return (DataTemplate) obj.GetValue(SelectionBoxItemTemplateProperty);
    }

    public static void SetSelectionBoxItemTemplate(DependencyObject obj, DataTemplate value)
    {
        obj.SetValue(SelectionBoxItemTemplateProperty, value);
    }

    public static readonly DependencyProperty SelectionBoxItemTemplateProperty =
        DependencyProperty.RegisterAttached("SelectionBoxItemTemplate", typeof (DataTemplate), typeof (ComboBoxExt),
                                            new PropertyMetadata(null));

}

要更新ComboBox控件模板,请在一个名为ContentPresenterBorder的元素中查找名为ContentPresenter的元素(您可以在此处找到ComboBox的默认样式)。 您需要删除ContentPresenter的名称(否则ComboBox将通过代码显式设置其属性的值,而忽略您设置的数据绑定)。

调整后的控件模板中的ContentPresenter元素应如下所示:

<ContentPresenter Margin="{TemplateBinding Padding}" 
                  Content="{Binding Path=SelectedItem, RelativeSource={RelativeSource TemplatedParent}}"
                  ContentTemplate="{Binding (a:ComboBoxExt.SelectionBoxItemTemplate), RelativeSource={RelativeSource TemplatedParent}}"
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
</ContentPresenter>

最后,要使用此功能,您需要执行以下操作:

<ComboBox 
   Style="{StaticResource MyAdjustedComboBoxStyle}"
   ItemTemplate="{StaticResource MyDropDownAreaTemplate}"
   Behaviors:ComboBoxExt.SelectionBoxItemTemplate="{StaticResource MySelectionAreaTemplate}">

你在找吗. SelectionBoxItemTemplate

在Silverlight4中可以使用SelectionBoxItemTemplate ,但是由于它是只读属性,因此无法从代码后方设置此属性的值。 而且它不是依赖项属性,因此无法使用comboBox.SetValue()方法设置值。 关于如何在后台代码中为该属性分配值的任何想法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM