J'ai essayé de passer un UserControl à travers les limites AppDomain et remarqué un comportement étrange avec FrameworkElementAdapters.ViewToContractAdapter()
et ContractToViewAdapter()
. Après que le INativeHandleContract
a été reconverti en FrameworkElement
en utilisant FrameworkElementAdapters.ContractToViewAdapters()
, le UserControl enveloppé ne change plus sa taille si l'un de ses enfants grandit.WPF UI AddIn ne pas mettre à jour sa taille
Ce comportement peut être facilement démontrée à l'aide d'un simple, vide, fenêtre WPF:
public partial class MainWindow : Window
{
private ListBox listBox;
private Button myButton;
public MainWindow()
{
InitializeComponent();
listBox = new ListBox();
Content = listBox;
myButton = new Button { Content = "Click me" };
myButton.Click += (sender, args) => myButton.Content = "Lorem ipsum dolor sit amet.";
myButton.SizeChanged += (sender, args) => Debug.WriteLine($"{myButton.DesiredSize}");
//listBox.Items.Add(myButton);
var frameworkElement = FrameworkElementAdapters.ContractToViewAdapter(FrameworkElementAdapters.ViewToContractAdapter(myButton));
listBox.Items.Add(frameworkElement);
}
}
Si vous cliquez sur le bouton, le texte change comme prévu. Cependant, le bouton ne se redimensionne pas, ce qui vous laisse un texte tronqué. Si vous commentez les deux dernières lignes et ajoutez simplement le bouton, cela fonctionnera comme prévu.
Je pense que c'est fondamentalement le même problème que dans this cas, mais il ne semble pas y avoir de solution. Est-ce que quelqu'un a une idée de comment se débarrasser de cela?
Merci d'avance!
J'ai réussi à modifier le comportement en encapsulant le bouton dans une grille. Vous avez seulement besoin d'avoir une taille automatique ColumnDefinition et RowDefinition. Maintenant, au moins, le bouton à l'intérieur du HwndHost/FrameworkElement semble changer sa taille. – edsplash