WPF DockPanel不遵守“填充”控件的所需大小

时间:2010-03-08 17:58:36

标签: wpf xaml dockpanel

我有以下Xaml(简化为简洁,但会在Xamlpad或Kaxaml中重现问题):

<DockPanel Width="400">
    <TextBlock DockPanel.Dock="Left" TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
        Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
        Aenean gravida tempus lectus ut ornare. 
            Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
    </TextBlock>
    <Button MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
</DockPanel>

我的问题是我希望Button占用最小100px的空间,并且文本适当地换行以留下该空间。但是,会发生的事情是文本尽可能接近400px,然后剪切Button。

如果我窥探输出,我可以看到按钮正在以所需的100px渲染,但是它被截取在DockPanel的侧面。

如果我反转Dock(所以按钮停靠在“Right”并且TextBlock填充),那么我得到了我想要的布局,但不幸的是,由于周围的布局,这不是一个选项。

我能做些什么才能使DockPanel成为a)而不是剪辑和b)以尊重MinWidth的方式布局?还是我找不到另一种布局机制?

提前致谢!

2 个答案:

答案 0 :(得分:0)

啊,我很笨,而且长时间一直盯着相同的代码。我太简单的解决方案是使用Grid:

<Grid Width="400">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <Button  Grid.Column="1" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
  <TextBlock TextWrapping="Wrap" Grid.Column="0">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
      Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
      Aenean gravida tempus lectus ut ornare. 
      Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
  </TextBlock>
</Grid>

为我自己的愚蠢问题道歉!

答案 1 :(得分:-1)

您应该将按钮停靠在右侧,然后让文本块填满其余部分。这是相应的xaml:

<DockPanel Width="400">
    <Button DockPanel.Dock="Right" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
    <TextBlock TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
        Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
        Aenean gravida tempus lectus ut ornare. 
        Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
    </TextBlock>
</DockPanel>

最诚挚的问候,
Oliver Hanappi