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(...)方法发布在这里.
或者您可以使用组合框的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)
| 归档时间: |
|
| 查看次数: |
12502 次 |
| 最近记录: |