我已经实现了一个用户控件,可以让我快速构建几个类似的界面屏幕.基本上,它定义了两个依赖项属性MainContent和UserInteractions,然后显示在可视模板(ResourceDictionary中的xaml)中,如下所示:
+-------------+
| L | |
| o | Main |
| g | Content |
| o | |
+---+---------+
| Interaction |
+-------------+
然后屏幕的Xaml看起来像这样:
<controls:ScreenControl>
<controls:ScreenControl.MainContent>
<TextBlock>Some content goes here</TextBlock>
</controls:ScreenControl.MainContent>
<controls:ScreenControl.UserInteractions>
<Button>Do something</Button>
</controls:ScreenControl.UserInteractions>
</controls:InstallerScreenControl>
这在我运行应用程序时工作正常.但是,在设计师中,没有任何东西可见.不是视图中明确定义的内容,也不是模板中的内容.我需要添加什么才能启用设计支持?我尝试将模板移动到主题/ Generic.xaml,如某些地方所建议的那样,但这没有任何区别. This SO question似乎相关,但没有得到有用的答案.
编辑:
我的ScreenControl看起来像这样:
public class ScreenControl : UserControl
{
public object MainContent
{
get { return GetValue(MainContentProperty); }
set { SetValue(MainContentProperty, value); }
}
public static readonly DependencyProperty MainContentProperty = DependencyProperty.Register(
name: "MainContent",
propertyType: typeof(object),
ownerType: typeof(ScreenControl),
typeMetadata: new PropertyMetadata(default(object)));
public object UserInteractions
{
get { return GetValue(UserInteractionsProperty); }
set { SetValue(UserInteractionsProperty, value); }
}
public static readonly DependencyProperty UserInteractionsProperty = DependencyProperty.Register(
name: "UserInteractions",
propertyType: typeof(object),
ownerType: typeof(ScreenControl),
typeMetadata: new PropertyMetadata(default(object)));
}
在设计器中查看使用该控件的屏幕时,它仅显示以下内容:
即,没有,只有一个空白框.
使用控件时,我正在创建一个UserControl,添加问题开头显示的Xaml,并删除代码隐藏文件.
最佳答案 您必须从Control继承自定义控件,而不是UserControl才能应用模板.
很难用你提供的信息来判断,但你必须有一个应用模板的静态构造函数.
public class ScreenControl : Control
{
static ScreenControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ScreenControl), new FrameworkPropertyMetadata(typeof(ScreenControl)));
}
}
在进一步阅读时可能不是你的问题,不确定你在某处有一些InDesignMode?
您的代码中的调用仅在应用程序运行时有效? IE WebService调用?只是在这里猜测,但很多事情可能会导致设计师破产.