Disons que j'ai un UserControl
commun qui a par défaut ControlTemplate
. Maintenant, je veux ajouter un AdornerDecorator
en tant qu'élément racine du ControlTemplate
.Ajouter un élément pour contrôler le modèle dans le code
Comment est-ce que je ferais cela?
Ma tentative à ce jour est la suivante:
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;
(Mon view
pourrait être d'un type dérivé de UserControl
.) Mais que les accidents avec StackOverflowException :(
EDIT: MyUserControl
a ce 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>
et ceci est le xaml.cs:
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}
}
Pourriez-vous s'il vous plaît essayer ce code, avec 'MyUserControl' étant une classe dérivée de' UserControl' avec son propre XAML. Je reçois une 'System.Xml.XmlException' avec un message comme ** Le caractère ':', valeur hexadécimale 0x3A, ne doit pas être contenu **. –
Veuillez ensuite publier le balisage XAML complet de UserControl. – mm8
L'exemple de balisage que vous avez fourni est invalide, mais si vous mettez "ABA" dans un TextBlock, mon exemple de code fonctionne. – mm8