我正在尝试根据它包含的用户控件的大小找到一种调整LayoutPanel(DevExpress)大小的方法。使用ContentControl公开用户控件。这是相关的代码 这是“布局”面板和相应的视图:
<dxd:LayoutPanel Caption="Search Criteria" CaptionImage="Images/Icons/DetailView.png">
<ContentControl Name="myContentControl" Content="{Binding Path=ProjectsSearchVM}"/>
</dxd:LayoutPanel>
ProjectSearchVM是MainWindowViewModel的一个属性,它是上面代码的DataContext。此属性返回一个类型为ProjectsSearchViewModel的对象,该对象使用资源文件替换为其对应的View(包含userControl):
<DataTemplate DataType="{x:Type vm:ProjectSearchViewModel}">
<vw:ProjectSearchView />
</DataTemplate>
问题是我的视图高于布局面板的原始大小。我想将面板的MinSize绑定到我的视图大小(或包含它的ContentControl)。
我试过这个,但它不起作用:
<dxd:LayoutPanel Caption="Search Criteria" CaptionImage="Images/Icons/DetailView.png">
<dxd:LayoutPanel.MinSize>
<Binding ElementName="myContentControl" Path="Size"/>
</dxd:LayoutPanel.MinSize>
<ContentControl Name="myContentControl" Content="{Binding Path=ProjectsSearchVM}" />
</dxd:LayoutPanel>
我还是WPF的新手,所以我确信解决方案很简单。 谁能开导我?
答案 0 :(得分:0)
在这个链接的DevExpress网站上回答了这个问题:
http://www.devexpress.com/Support/Center/Question/Details/Q448884
对于弹出窗口,它涉及覆盖容器中的控件,例如,如果它在Border
中,就像这样:
public class AutoSizeContainer : Border {
protected override void OnInitialized(EventArgs e) {
base.OnInitialized(e);
BaseLayoutItem item = DockLayoutManager.GetLayoutItem(this);
Child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
AutoHideGroup.SetAutoHideSize(item, new Size(Child.DesiredSize.Width + 6, Child.DesiredSize.Height + 6));
}
}
使这样的对象成为LayoutPanel
组中AutoHide
的根对象,使得弹出窗口大小正确。
答案 1 :(得分:-1)
我不熟悉DevExpress的LayoutPanel,但大多数标准的WPF面板(Grid,StackPanel)“自动调整大小”以包含他们的孩子。您是否为LayoutPanel设置了硬高度和宽度属性(或者它是否仅包含Size属性而不是标准WPF控件的高度和宽度)?
如果你被迫使用硬高度/宽度值,绑定它们的常用方法是这样的:
<dxd:LayoutPanel ... Height="{Binding Height, ElementName=myContentControl}" Width="{Binding Width, ElementName=myContentControl}">
<ContentControl x:Name=myContentControl ... />
</dxd:LayoutPanel>
通常,如果绑定高度和宽度,则绑定到ActualHeight或ActualWidth,但ContentControl上不存在这些属性。 (高度和宽度只是建议值,因此您可能会发现如果需要上述绑定并且适用于您,则可能需要使用值转换器稍微调整值以考虑边距或填充)。