私はAppDomain境界を介してUserControlを渡そうとしていて、FrameworkElementAdapters.ViewToContractAdapter()
とContractToViewAdapter()
という奇妙な動作に気がつきました。 INativeHandleContract
がFrameworkElementAdapters.ContractToViewAdapters()
を使用してFrameworkElement
に変換された後、ラップされたUserControlは、その子の1つが大きくなると、そのサイズをもう変更しません。WPF UI AddInのサイズが更新されない
この動作は簡単な、空、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);
}
}
期待どおりに、テキストの変更をボタンをクリックした場合。ボタンはサイズ変更されませんが、切り捨てられたテキストが残ります。最後の2行をコメントアウトしてボタンを追加するだけで、期待どおりに動作します。
基本的にはthisの場合と同じ問題だと思いますが、解決策がないようです。誰にもこれを取り除く方法を知っていますか?
ありがとうございます!
ボタンをグリッドにカプセル化して動作を変更することができました。自動サイズのColumnDefinitionとRowDefinitionを持つだけです。今、少なくとも、HwndHost/FrameworkElement内のボタンのサイズが変わっているようです。 – edsplash