根据用户控件的大小调整面板大小

时间:2011-06-29 18:32:40

标签: wpf xaml binding devexpress

我正在尝试根据它包含的用户控件的大小找到一种调整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的新手,所以我确信解决方案很简单。 谁能开导我?

2 个答案:

答案 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上不存在这些属性。 (高度和宽度只是建议值,因此您可能会发现如果需要上述绑定并且适用于您,则可能需要使用值转换器稍微调整值以考虑边距或填充)。