如何在UserControl中使用抽象类

时间:2016-03-02 17:51:35

标签: c# wpf user-controls overrides

我有UserControl

我希望每个UserControl覆盖一个抽象方法。

这是我的抽象类:

public class MyAbstract
{
    public virtual void LoadData()
    {

    }
}

这是我的用户控件,我最近试图让它工作:

public partial class ucAbstract : UserControl, MyAbstract
{
    public ucAbstract()
    {
        InitializeComponent();
    }

    public override void LoadData()
    {
        base.Load();
        {

        }
    }
}

错误是:

  

Class' ucAbstract'不能有多个基类:' UserControl'和' MyAbstract'

我该怎么做?

附加: 我可能不得不删除此添加内容并创建一个新问题。

这就是我想要实现的目标:

我的主要表单包含2个UserControlsucOneucTwo

这两个控件都有一个名为' LoadData'。

的方法

我的主要形式有一个功能:

void LoadControl(iuserControl myUserControl)
{
    myUserControl.LoadData();
}

4 个答案:

答案 0 :(得分:4)

这个怎么样。

创建一个基础class,其中包含UserControl的所有常用方法。确保使用UserControl

进行扩展

<强> MyAbstract.cs

public abstract class MyAbstract   : UserControl
{
    public virtual void LoadData()
    {

    }
}

然后创建一个UserControl并使用MyAbstract类扩展它。你可以这样使用。

<强> ucAbstract.xaml.cs

public partial class ucAbstract : MyAbstract
{
    public ucAbstract()
    {
        InitializeComponent();
    }

    public override void LoadData()
    {
        base.LoadData();
        {

        }
    }
}

此外,您需要在xaml中使用<local:MyAbstract>而不是<UserControl>

<强> ucAbstract.xaml

<local:MyAbstract x:Class="YourNamespace.ucAbstract"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:YourNamespace"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <StackPanel>
        <TextBox />
    </StackPanel>
</local:MyAbstract> 

注意:

  • 您可以使用UserControl创建多个MyAbstract作为BaseClass。
  • UserControls只允许一个级别的继承,至少是这样 MyAbstract有一个XAML,这肯定不起作用。

参考: Partial declarations, must not specify different base classes

答案 1 :(得分:2)

C#不支持多重继承,您不能从多个类(UserControlMyAbstract)继承。你可以使用interface而不是像这样的类:

public interface IMyAbstract
{
    void LoadData();
}

然后你应该实现这样的界面:

public partial class ucAbstract : UserControl, IMyAbstract
{
   public void LoadData()
   {

   }
}

答案 2 :(得分:0)

实际上,w1 w2 w3 w4 ... w52 1 2 3 4 ... 12 1 0 0 1 0 2 4 5 2 ... 4 0 1 0 0 ... 0 1 0 3 4 ... 5 对象需要ICommand用于条件加载,而不是CommandParameter方法。

答案 3 :(得分:0)

您可以创建UserControl

Public class MyUserControl : UserControl
{
public virtual LoadData()
{
// ...
}
}