覆盖一个UseControl's库
本文关键字:UseControl 一个 覆盖 | 更新日期: 2023-09-27 18:12:48
我想开发一个WPF用户控制库,它使用带有可以被重写的成员函数的类库。我使用的是c# 4.0和VS 2010。
我的测试类库看起来像:
using System.Diagnostics;
namespace MyLibrary {
public class Foo {
virtual public void Bar() {
Debug.WriteLine(" Hi from MyLibrary, class Foo, method Bar.");
}
}
}
我的WPF用户控件看起来像:
using System.Windows.Controls;
using System.Diagnostics;
using MyLibrary;
namespace MyUserControl {
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
Debug.WriteLine("MyUserControl: ");
var foo = new Foo();
foo.Bar();
}
}
}
我已经建立了一个WPF应用程序称为ProgramA,它看起来像:
using System;
using System.Diagnostics;
using System.Windows;
namespace ProgramA {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
}
在调试ProgramA时,您将看到:
MyUserControl:
Hi from MyLibrary, class Foo, method Bar.
在调试输出窗口。到目前为止,一切顺利。
我还构建了ProgramB来尝试覆盖MyLibrary的Bar方法。程序b看起来像:
using System.Windows;
namespace ProgramB {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
}
ProgramA和ProgramB的XML都包含对MyUserControl的引用:
<Window x:Class="ProgramB.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:my="clr-namespace:MyUserControl;assembly=MyUserControl">
<Grid>
<my:UserControl1 Name="userControl11"
HorizontalAlignment="Left"
VerticalAlignment="Top" />
</Grid>
</Window>
我在ProgramB的项目中添加了一个名为NewFoo.cs的类,它看起来像:
using System.Diagnostics;
using MyLibrary;
namespace ProgramB {
class NewFoo : MyLibrary.Foo{
override public void Bar() {
Debug.WriteLine(" Hi from ProgramB Foo, method Bar.");
}
}
}
ProgramB编译并运行,但是输出是:
MyUserControl:
Hi from library Foo, method Bar.
覆盖无效。
问题在这里。ProgramB的Foo方法的命名空间是ProgramB,因此它不会覆盖MyLibrary的Bar方法。
是否有一种方法ProgramB可以覆盖由MyUserControl使用的Bar方法?
任何帮助或建议都将非常感谢。查尔斯。这是因为UserControl1
不知道NewFoo
,只实例化了Foo
。它与名称空间无关。
重写将工作,只要你提供正确的实例。
你应该在UserControl1
中公开一个属性,在那里你可以设置foo
使用什么