首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ComboBox ItemTemplateSelector.Selecttemplate从未被调用。

WPF ComboBox ItemTemplateSelector.Selecttemplate从未被调用。
EN

Stack Overflow用户
提问于 2018-03-14 13:26:49
回答 1查看 678关注 0票数 1

基于this answer,我尝试使用以下代码实现具有不同模板的ComboBox,具体取决于下拉列表是否打开。ComboBox定义如下所示:

代码语言:javascript
复制
<ComboBox SelectedValuePath="Id"
          DisplayMemberPath="Name">
    <ComboBox.Resources>
        <DataTemplate x:Key="SelectedTemplate">
            <TextBlock Text="Abbreviation" />
        </DataTemplate>

        <DataTemplate x:Key="DropDownTemplate">
            <ContentControl Content="{Binding}">
                <ContentControl.Style>
                    <Style TargetType="{x:Type ContentControl}">
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border}}, Path=ActualWidth, Mode=OneTime}">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="20" />
                                        </Grid.ColumnDefinitions>

                                        <TextBlock Grid.Column="0"
                                                   Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=DisplayMemberPath}" />
                                        <TextBlock Grid.Column="1" 
                                                   Text="Abbreviation" />
                                    </Grid>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </DataTemplate>

        <infrastructure:ComboBoxItemTemplateSelector x:Key="ComboBoxItemTemplateSelector"
                                                 DropDownDataTemplate="{StaticResource DropDownTemplate}"
                                                 SelectedDataTemplate="{StaticResource SelectedTemplate}" />
    </ComboBox.Resources>
</ComboBox>

ComboBoxItemTemplateSelector看起来是这样的:

代码语言:javascript
复制
public class ComboBoxItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate DropDownDataTemplate { get; set; }
    public DataTemplate SelectedDataTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        return DependencyObjectHelper.GetVisualParent<ComboBoxItem>(container) != null ? this.DropDownDataTemplate : this.SelectedDataTemplate;
    }
}

现在的问题是,SelectTemplate 从来没有被称为,尽管我检查了所有的DynamicResourceStaticResource

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 13:35:32

您需要像这样将ComboBoxItemTemplateSelector分配给ComboBox

代码语言:javascript
复制
<ComboBox ItemTemplateSelector="{DynamicResource ComboBoxItemTemplateSelector}">

您不能设置DisplayMemberPath,否则将永远不会调用SelectTemplate方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49279001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档