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