gpt4 book ai didi

c# - ComboBox 的默认模板 : How does IsEditable switch TextBox and Contentpresenter

转载 作者:行者123 更新时间:2023-12-05 08:10:11 25 4
gpt4 key购买 nike

我在 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验证:“当 IsEditable 等于 false 时,ComboBox 使用 ContentPresenter 显示当前选定的项目;当 IsEditable 等于 true 时,TextBox 用于此目的。请注意,TextBox 仅显示纯文本,并且 ComboBoxItem 可能包含非纯文本内容,例如图像。”我的问题是,在 TextBox 中,它在哪里定义文本? Template (ComboBoxTextBox) 不分配文本。我问是因为我试图让 TextBox 显示与 ContentPresenter 相同的信息(如果可能的话)(即,当 IsEditable 为 False),我理解其模板绑定(bind)到我指定的 Template

最佳答案

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

所以设置 IsReadOnly="True"将使它像一个 ContentPresenter 否则它就像一个文本框一样可编辑

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

可以根据自己的需要定制

关于c# - ComboBox 的默认模板 : How does IsEditable switch TextBox and Contentpresenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24300043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com