是的,此问题已被提出,但请继续阅读。
在各个地方我都知道这是限制可编辑ComboBox字符的有效方法。 (即How can I set the length of entered text in a combobox?)
<Window x:Class="PlaygroundWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PlaygroundWPF"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<TextBox Width="200" Margin="5" MaxLength="10" />
<ComboBox Name="comboBox" Width="200" Margin="5" IsEditable="True">
<ComboBox.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="MaxLength" Value="10"/>
</Style>
</ComboBox.Resources>
</ComboBox>
</StackPanel>
</Grid>
</Window>
出于某种原因,这对我不起作用:
我知道还有其他方法可以做到这一点,但我想知道为什么上面的xaml对我不起作用,而这似乎适用于其他人。
在这个例子中,我的目标是.NET 4.5,但我已经使用4.0和4.6测试了相同的结果。
答案 0 :(得分:0)
我认为我对WPF中的模板和样式有很好的理解。我错了。 在使用样式定义及其位置,并通过Snoop检查可视树后,我相信我有一些解释。 根据{{3}}和this article
因此。 Combobox
有ControlTemplate
。 Combobox
根据ControlTemplate
属性更改其IsEditable
内容。 ControlTemplate
始终被视为样式的边界,如果您考虑它,就会产生意义。否则,WPF中的所有内容都会对样式问题更加脆弱。例如,如果要对边框应用一些边距,可以设置样式目标边框类型,并在边框中放入父资源,如UserControl,Window或其他任何内容。如果ControlTemplate不会停止样式&#34;通过它&#34;,那么这个地方的所有控件都会被搞砸,因为几乎所有这些控件都在模板中使用了边框。
我不确定回复此this answer的人是否真的检查了他的答案。
希望我帮助过。