将用户控件转移到WPF自定义控件

时间:2014-06-21 08:42:47

标签: wpf xaml controls

好的,我有一个用户控件,我想将其转换为WPF自定义控件。

用户控件有代码隐藏文件,所以我可以直接注册到控件事件: 例如:

<TextBox Grid.Column="0" 
                 Name="valueBox"                 
                 TextAlignment="Right" TextChanged="valueBox_TextChanged" PreviewKeyDown="valueBox_PreviewKeyDown" />

后面代码中对应的valueBox_TextChanged事件是:

 private void valueBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        var textBox = (TextBox)sender;
        var positiveWholeNum = new Regex(@"^-?\d+$");
        if (!positiveWholeNum.IsMatch(textBox.Text) || int.Parse(textBox.Text) < 0)
        {
            textBox.Text = "0";
        }
        NumericValue = Convert.ToInt32(textBox.Text);

        RaiseEvent(new RoutedEventArgs(ValueChangedEvent));

    }

现在,当我尝试将其转换为自定义控件时,我有一个主题文件夹,带有Generic.Xaml文件。并且文件:MyCustomControl.cs

在Generic.Xaml中,我写过(我来自Control)

<TextBox Grid.Column="0" 
                 Name="valueBox"                 
                 TextAlignment="Right"  />

并在cs文件中:

public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        AttachTextBox();
    }


 protected TextBox TextBox;

    private void AttachTextBox()
    {
        var textBox = GetTemplateChild("valueBox") as TextBox;

        if (textBox != null)
        {
            TextBox = textBox;
        }
    }

现在,我如何编写用户控件中写入的valueBox_TextChanged的替换?

1 个答案:

答案 0 :(得分:0)

您可以在generic.xaml文件的代码隐藏中编写valueBox_TextChanged事件处理程序的代码。要为Generic.XAML创建fiel后面的代码,请按照以下步骤操作。

  1. 添加名为generic.xaml.cs的文件

    Right click on themes folder and select new class
    
    Name it as generic.xaml.cs
    
  2. 将generic.xaml.cs中类的定义更改为partial class generic:ResourceDictionary //这个类应该继承自 ResourceDictionary中
  3. 使用x:Class

    将此代码隐藏文件链接到Gereric.xaml

  4. 现在,您可以在generic.xaml.cs文件中为generic.xaml元素编写代码。

    更多信息:Code behind for Generic.XAML