我在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
。
答案 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>
您可以根据需要自定义