如何在WPF中设置组合框的maxlength?

Ers*_*had 14 wpf combobox maxlength

如何将maxlength设置为combobox,它已应用了样式.

谢谢

Tri*_*ran 23

使用DependencyProperty时,我们可以设置组合框的最大长度而无需修改样式/模板.

public class EditableComboBox
{

    public static int GetMaxLength(DependencyObject obj)
    {
        return (int)obj.GetValue(MaxLengthProperty);
    }

    public static void SetMaxLength(DependencyObject obj, int value)
    {
        obj.SetValue(MaxLengthProperty, value);
    }

    // Using a DependencyProperty as the backing store for MaxLength.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MaxLengthProperty = DependencyProperty.RegisterAttached("MaxLength", typeof(int), typeof(EditableComboBox), new UIPropertyMetadata(OnMaxLenghtChanged));

    private static void OnMaxLenghtChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        var comboBox = obj as ComboBox;
        if (comboBox == null) return;

        comboBox.Loaded +=
            (s, e) =>
            {
                var textBox = comboBox.FindChild(typeof(TextBox), "PART_EditableTextBox");
                if (textBox == null) return;

                textBox.SetValue(TextBox.MaxLengthProperty, args.NewValue);
            };
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

<ComboBox ComboboxHelper:EditableComboBox.MaxLength="50" />
Run Code Online (Sandbox Code Playgroud)

ComboboxHelper的地方是:

xmlns:ComboboxHelper ="clr- namespace:yourNameSpace ; assembly = yourAssembly "

comboBox.FindChild(...)方法发布在这里.


bij*_*iju 7

或者您可以使用组合框的GotFocus或Loaded事件来设置maxlength.如果maxlength doest在运行期间变化太大,您可以使用加载的事件或者使用gotfocus事件

<ComboBox Height="30" IsEditable="True" Loaded="ComboBox_Loaded"/>
Run Code Online (Sandbox Code Playgroud)

并在相应的事件中......

   var obj = (ComboBox)sender;
    if (obj != null)
    {
        var myTextBox = (TextBox)obj.Template.FindName("PART_EditableTextBox",obj);
        if (myTextBox != null)
        {
            myTextBox.MaxLength = maxLength;
        }
    }
Run Code Online (Sandbox Code Playgroud)