1

我有以下 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 被剪裁。

如果我窥探输出,我可以看到按钮以所需的 100 像素呈现,但它被从 DockPanel 的一侧剪掉了。

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

我可以做些什么来使 DockPanel a)不剪辑和 b)以尊重 MinWidth 的方式布局?还是我一直在寻找替代布局机制?

提前致谢!

4

2 回答 2

0

啊,我很笨,盯着同一个代码太久了。我过于简单的解决方案是使用网格:

<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>

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

于 2010-03-09T09:31:57.160 回答
-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>

最好的问候,
奥利弗·哈纳皮

于 2010-03-08T18:04:53.500 回答