将ElementHost的大小调整为托管的XAML UserControl的大小

时间:2009-07-06 09:22:24

标签: c# wpf xaml

我想在Windows窗体应用中使用扩展面板。我正在看看是否可以使用WPF Expander控件。我创建了一个Xaml UserControl,我继承自Expander而不是UserControl。我在扩展器上有一个触发器来设置它的大小。

是否可以更改ElementHost的高度以反映孩子大小的变化?或者我最好不要在Windows窗体中创建一个扩展的面板?

我正在使用C#.Net 3.5。

干杯

2 个答案:

答案 0 :(得分:0)

你是否有任何特殊原因要从扩展器继承而只是在你的用户界面中使用扩展器?

如果设置扩展器的H / V对齐属性,则应该能够获得大多数标准大小调整行为,而无需使用大小触发器。根据我的经验,Expander的内容部分会自动调整大小以适应。

如果您试图完全删除标题部分,那么您可能会考虑为扩展器创建自己的ControlTemplate。

答案 1 :(得分:0)

是。您需要覆盖最外层WPF控件中的MeasureOverride,将大小从WPF坐标转换为设备坐标,然后更新ElementHost.Size

由于您已经是Expander的子类:

  1. 覆盖MeasureOverride方法
  2. 计算完测量后,使用PresentationSource.From(visual).CompositionTarget.TransformToDevice.Transform(point)获取设备坐标
  3. 更新ElementHost.Size
  4. 您的Expander子类实例需要一个指向ElementHost的指针才能执行此操作。

    更通用的解决方案是创建一个新类来处理同步。它将继承FrameworkElement并成为ElementHost的直接子项。