我想在Windows窗体应用中使用扩展面板。我正在看看是否可以使用WPF Expander控件。我创建了一个Xaml UserControl,我继承自Expander而不是UserControl。我在扩展器上有一个触发器来设置它的大小。
是否可以更改ElementHost的高度以反映孩子大小的变化?或者我最好不要在Windows窗体中创建一个扩展的面板?
我正在使用C#.Net 3.5。
干杯
答案 0 :(得分:0)
你是否有任何特殊原因要从扩展器继承而只是在你的用户界面中使用扩展器?
如果设置扩展器的H / V对齐属性,则应该能够获得大多数标准大小调整行为,而无需使用大小触发器。根据我的经验,Expander的内容部分会自动调整大小以适应。
如果您试图完全删除标题部分,那么您可能会考虑为扩展器创建自己的ControlTemplate。
答案 1 :(得分:0)
是。您需要覆盖最外层WPF控件中的MeasureOverride
,将大小从WPF坐标转换为设备坐标,然后更新ElementHost.Size
。
由于您已经是Expander
的子类:
MeasureOverride
方法PresentationSource.From(visual).CompositionTarget.TransformToDevice.Transform(point)
获取设备坐标ElementHost.Size
。您的Expander
子类实例需要一个指向ElementHost
的指针才能执行此操作。
更通用的解决方案是创建一个新类来处理同步。它将继承FrameworkElement
并成为ElementHost
的直接子项。