限制可编辑ComboBox的输入长度

时间:2015-09-17 12:37:40

标签: wpf

是的,此问题已被提出,但请继续阅读。

在各个地方我都知道这是限制可编辑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>

出于某种原因,这对我不起作用:

enter image description here

我知道还有其他方法可以做到这一点,但我想知道为什么上面的xaml对我不起作用,而这似乎适用于其他人。

在这个例子中,我的目标是.NET 4.5,但我已经使用4.0和4.6测试了相同的结果。

1 个答案:

答案 0 :(得分:0)

我认为我对WPF中的模板和样式有很好的理解。我错了。 在使用样式定义及其位置,并通过Snoop检查可视树后,我相信我有一些解释。 根据{{​​3}}和this article

因此。 ComboboxControlTemplateCombobox根据ControlTemplate属性更改其IsEditable内容。 ControlTemplate始终被视为样式的边界,如果您考虑它,就会产生意义。否则,WPF中的所有内容都会对样式问题更加脆弱。例如,如果要对边框应用一些边距,可以设置样式目标边框类型,并在边框中放入父资源,如UserControl,Window或其他任何内容。如果ControlTemplate不会停止样式&#34;通过它&#34;,那么这个地方的所有控件都会被搞砸,因为几乎所有这些控件都在模板中使用了边框。

我不确定回复此this answer的人是否真的检查了他的答案。

希望我帮助过。