ComboBox的默认模板:IsEditable如何切换TextBox和Contentpresenter

时间:2014-06-19 06:26:26

标签: c# .net wpf combobox

我在WPF中使用ComboBox但有一种我不理解的行为:这是default style/template of ComboBox的链接。当IsEditable为True时,TextBox会显示,用户可以键入要搜索的文字。我没有完全理解这一点所以我正在检查代码:

<ContentPresenter x:Name="ContentSite"
                        IsHitTestVisible="False"
                        Content="{TemplateBinding SelectionBoxItem}"
                        ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                        ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                        Margin="3,3,23,3"
                        VerticalAlignment="Stretch"
                        HorizontalAlignment="Left">
      </ContentPresenter>
      <TextBox x:Name="PART_EditableTextBox"
               Style="{x:Null}"
               Template="{StaticResource ComboBoxTextBox}"
               HorizontalAlignment="Left"
               VerticalAlignment="Bottom"
               Margin="3,3,23,3"
               Focusable="True"
               Background="Transparent"
               Visibility="Hidden"
               IsReadOnly="{TemplateBinding IsReadOnly}" />

似乎有两个视觉组件重叠,IsEditable通过设置Visibility在它们之间切换。 This link验证:&#34; 当IsEditable等于false时,ComboBox使用ContentPresenter显示当前选定的项目;当IsEditable等于true时,TextBox用于此目的。请注意,TextBox仅显示纯文本,ComboBoxItem可能包含非纯文本内容,例如图像。&#34;我的问题是,在TextBox中,它在哪里定义文本? Template(ComboBoxTextBox)不分配文本。我问的是因为我试图让TextBox显示相同的信息(如果可能的话)ContentPresenter(即,当IsEditable为假时) ,我理解的模板绑定到我分配的Template

1 个答案:

答案 0 :(得分:0)

这里是一个简单的文本框基本模板,只有文本编辑部分

所以设置IsReadOnly =&#34; True&#34;会使它像ContentPresenter一样,否则就像文本框一样可编辑

<TextBox Text="edit me">
    <TextBox.Template>
        <ControlTemplate TargetType="TextBox">
            <ScrollViewer x:Name="PART_ContentHost" />
        </ControlTemplate>
    </TextBox.Template>
</TextBox>

您可以根据需要自定义

相关问题