代码之家  ›  专栏  ›  技术社区  ›  Dan Puzey

wpf dockpanel不尊重“filled”控件所需的大小

  •  0
  • Dan Puzey  · 技术社区  · 15 年前

    我有以下的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>
    

    我的问题是,我希望按钮占用它最小的100px空间,并使文本适当地换行以留出该空间。然而,发生的情况是,文本包装尽可能接近400px,然后按钮被剪裁。

    如果我窥视输出,我可以看到按钮正在以所需的100px进行渲染,但它正在从dockpanel的一侧被剪裁。

    如果我反向停靠(因此按钮停靠在“右侧”,文本块填充),那么我得到了所需的布局,但不幸的是,由于周围的布局,这不是一个选项。

    有什么我可以做的,使dockpanel a)不剪辑和b)布局的方式,尊重最小宽度?还是我一直在寻找另一种布局机制?

    提前谢谢!

    2 回复  |  直到 15 年前
        1
  •  0
  •   Dan Puzey    15 年前

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

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

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

        2
  •  -1
  •   Oliver Hanappi    15 年前

    您应该将按钮停靠在右侧,让文本块填满其余部分。下面是相应的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>
    

    谨致问候,
    奥利弗·哈纳比