1
比方说,我有一个共同的UserControl
,它的默认值为ControlTemplate
。现在我想添加一个AdornerDecorator
作为ControlTemplate
的根元素。在代码中添加元素以控制模板
我该怎么做?
我尝试到目前为止是这样的:
UserControl view;
var templateWithAdornerDecorator = new ControlTemplate(view.GetType());
var adornerDecorator = new FrameworkElementFactory(typeof(AdornerDecorator));
var otherView = new FrameworkElementFactory(view.GetType());
otherView.SetValue(Control.TemplateProperty, view.Template);
adornerDecorator.AppendChild(otherView);
templateWithAdornerDecorator.VisualTree = adornerDecorator;
view.Template = templateWithAdornerDecorator;
(我view
可能是一个派生类型的UserControl
的。) 但是以StackOverflowException :(
编辑崩溃: MyUserControl
has this xaml:
<UserControl x:Class="MyNameSpace.Wpf.Sample.MyUserControl"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
ABA
</UserControl>
并且这是xaml.cs:
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}
}
能否请您试试这个代码,用'MyUserControl'是从'UserControl'派生类中有自己的XAML。我得到一个'System.Xml.XmlException',其消息如**':'char,十六进制值0x3A,不得包含**。 –
然后请发布UserControl的完整XAML标记。 – mm8
您提供的示例标记是无效的,但是如果您将“ABA”放在TextBlock中,我的示例代码就可以工作。 – mm8