WPF组合框:尝试输入长度为>;的文本时,光标超出范围;组合框宽度

WPF组合框:尝试输入长度为>;的文本时,光标超出范围;组合框宽度,wpf,combobox,textarea,Wpf,Combobox,Textarea,我正在使用可编辑的组合框,可以在WPF组合框的文本框区域中输入文本。当输入的文本长度大于组合框的宽度时,光标仍显示在组合框外部和表单上,但不显示文本。是否有限制光标不移出组合框的方法 谢谢。您可以覆盖并设置用于内容演示(PART_EditableTextBox)的文本框上的MaxLength属性,然后在需要时重新使用该样式 如果您更喜欢在代码中执行,您可以检查这一点,这将实现相同的行为,但不会强制您创建样式 编辑: 如果你想让它更具活力,你必须这样做。您可以处理TextChanged事件并执行测

我正在使用可编辑的组合框,可以在WPF组合框的文本框区域中输入文本。当输入的文本长度大于组合框的宽度时,光标仍显示在组合框外部和表单上,但不显示文本。是否有限制光标不移出组合框的方法

谢谢。

您可以覆盖并设置用于内容演示(PART_EditableTextBox)的
文本框
上的
MaxLength
属性,然后在需要时重新使用该样式

如果您更喜欢在代码中执行,您可以检查这一点,这将实现相同的行为,但不会强制您创建样式

编辑:


如果你想让它更具活力,你必须这样做。您可以处理
TextChanged
事件并执行测量。

我不知道您是否找到了解决方案,但我有相同的问题,正如我现在看到的,它来自代码的这一部分:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}">
    <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" />
</ControlTemplate>

…在组合框样式内,在模板的Setter中:

... 
<TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" 
...
。。。

对PART_ContentHost而不是border使用ScrollViewer。 例如:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}">
    <ScrollViewer x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding  Background}" />
</ControlTemplate>
... 
<TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" 
...

... 

你好,亚伦,谢谢你的回复。我设置了MaxLength,它是输入combobox文本区域的字符数。但是,这里的问题是每个字符占用的空间不同。假设MaxLength在xaml中设置为30,当我输入小写时,它可能是好的,并且在combobox中,但是如果我输入大写,它仍然超过combobox。另外,不同的字符组合占用不同的空间。这是我的想法:如果我可以在combobox控件中获得光标到达文本框边缘的位置(就像在文本换行中一样),我可以将该值设置为MaxLength,而不是在xaml中硬编码。但到目前为止,还不确定如何做到这一点。@user296623当然,这种方法有一些注意事项。如果您可以让您的组合框尽可能宽,那么这就不是问题。不确定你是否需要处理本地化问题,因为这可能是另一个有趣的领域。您还可以使组合框的可编辑部分增长…因此其宽度不是固定的,这将允许组合框随着键入的进行而增长。不过,这一切都归结为屏幕不动产……不确定你的根本问题是什么。@user296623你必须衡量文本,在帖子中添加了额外的评论