带有OnTextChanged事件的MyComboBox在wpf中

时间:2018-04-16 16:47:53

标签: c# wpf combobox

我想实现简单的MyComboBox并覆盖两个事件--LostFocus和OnTextChanged,但我无法访问OnTextChanged事件(我想这是因为它来自TextBoxBase)。我想拥有自己的ComboBox,它立即在TextChanged上设置(mod 360)值并在LostFocus上添加360.

public class MyComboBox : ComboBox
{
    protected override void OnLostKeyboardFocus(KeyboardFocusChangedEventArgs e)
    {
        int variable;

        if (int.TryParse(Text, out variable))
        {
            if (variable < 0)
                Text = (variable + 360).ToString();
        }
    }
    protected override void OnTextChanged(EventArgs e) //It is only for preview what I want to do
    {
        int variable;
        if (int.TryParse(Text, out variable))
        {
             variable = variable % 360;
             Text = variable.ToString();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

通过从组合框派生并获得默认组合框的样式来创建自己的自定义组合框。

可以使用自定义控件的一般文章here

您可以通过在xaml设计器中选择它来获取WPF元素的默认样式 - &gt;编辑模板 - &gt;编辑副本并将创建的样式移动到资源字典中。

之后,您可以获取编辑器并从自定义控件中分配/传播该功能,例如:

public class MyComboBox : ComboBox
{
....
private TextBox _partEditor;

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    Unloaded += OnUnloaded;

    _partEditor = GetTemplateChild(@"PART_EditableTextBox") as ItxWpfTextBoxBaseBase;
    if (_partEditor == null)
        return;

    _partEditor.TextChanged += PART_Editor_OnTextChanged;
}

private void OnUnloaded(object sender, RoutedEventArgs routedEventArgs)
{
    if (_partEditor == null)
        return;

    _partEditor.TextChanged -= PART_Editor_OnTextChanged;
    _partEditor = null;
}

对不起,我不了解更简单的方法。