【发布时间】:2010-09-07 06:27:01
【问题描述】:
好吧,我有一个继承 usercontrol(view) 的控件,并且我在使用它时使用它,因为您使用的是 usercontrol(基本控件),如果我这样做了,这就是问题
MessageBox.Show(this.GetType().ToString());
我在运行时和设计时得到不同的消息,在设计时我得到视图,我在运行时得到继承视图的 xaml 文件的类名...
如何在设计时获取继承类类型而不是基类?
这里有一些代码:
首先我们有视图类
public class View : UserControl
{
public override void OnApplyTemplate()
{
MessageBox.Show(this.GetType().ToString());
base.OnApplyTemplate();
}
}
然后我们有一个 XAML 文件:
<local:View x:Class="WpfApplication2.Test"
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:WpfApplication2"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
</Grid>
</local:View>
现在,如果您在 VisualStudio 2010 中编译并打开“WpfApplication2.Test”,您将看到一个显示“WpfApplication2.View”的消息框..
但是,如果您将 Test 控件放在 MainWindow 中并按 Run(F5),您会得到 WpfApplication2.Test.. 我想要的是在设计时具有与运行时相同的响应...
【问题讨论】:
-
我不完全了解您的情况。您可以发布您的控件的 XAML sn-p 以及您正在执行此消息框调用的一些上下文吗?另外,对您最终要完成的工作的进一步解释可能会有所帮助?可能有更有效的方法来做你最终想要的。
-
什么是“设计时间”?您的意思是当您在 IDE 中将鼠标悬停时,它会显示“查看”?
-
对其进行了编辑以进一步解释并添加了一些代码..
-
我复制了你的项目,但你有没有注意到,如果你进入显示测试控件的窗口,已经在设计时,窗口会提示“测试”?
-
是的,但如果您在设计模式下打开测试控件,它会显示视图
标签: c# xaml design-time