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>

私の問題は、ボタンに最小 100 ピクセルのスペースを確保し、テキストを適切に折り返してそのスペースを残すことです。ただし、テキストが可能な限り 400px 近くで折り返され、Button が切り取られます。

出力をスヌープすると、ボタンが目的の 100 ピクセルでレンダリングされていることがわかりますが、DockPanel の側面から切り取られています。

Dock を逆にすると (ボタンが「右」にドッキングされ、TextBlock が塗りつぶされます)、必要なレイアウトが得られますが、残念ながら周囲のレイアウトのため、それはオプションではありません。

DockPanel を a) クリップしないようにし、b) MinWidth を尊重するようにレイアウトするためにできることはありますか? それとも、別のレイアウト メカニズムを見つけるのに行き詰っていますか?

前もって感謝します!

4

2 に答える 2

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>

私自身のばかげた質問で申し訳ありません!

于 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 に答える