1
私が共通のUserControl
を持っていて、それがデフォルトのControlTemplate
になっているとします。ここでControlTemplate
のルート要素としてAdornerDecorator
を追加します。コードで制御テンプレートに要素を追加します
どうすればいいですか?
次私のこれまでの試みです:
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 :(
EDITでクラッシュ: MyUserControl
この中には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'は独自のXAMLとUserControl''から派生したクラスであることで、このコードを試してみてくださいでした:
はこれを試してみてください。私は 'System.Xml.XmlException'を**のようなメッセージで取得します。 ':' char、16進数値0x3Aは含まれてはいけません**。 –
その後、UserControlのXAMLマークアップを投稿してください。 – mm8
あなたが提供したサンプルマークアップは無効ですが、私のサンプルコードがTextBlockに "ABA"を入れても問題ありません。 – mm8