2012-05-16 24 views
1

我想獲得一個窗口類似聊天窗口,其中的文本項目列表繪製。該窗口應該可以調整大小,並且每個文本項目都應該包裝,如果它不符合一行。限制一個ListView的寬度爲父強制子文本包裝

我到目前爲止有:

MessageItem - 用戶控制,多的TextBlock在邊境

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    <Border BorderBrush="Silver" BorderThickness="1" Height="Auto" HorizontalAlignment="Left" Margin="0,10,0,10" Name="messageContainer" VerticalAlignment="Top" Width="Auto"> 
     <TextBlock Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="messageContent" VerticalAlignment="Stretch" Width="Auto" Text="This is some longer text. Wow that wasn't as long as I thought." TextWrapping="Wrap" Padding="10" /> 
    </Border> 
</Grid> 

MessageBox - 與持有MessageItems

<Grid Name="messageGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    <ScrollViewer VerticalScrollBarVisibility="Auto"> 
     <!--<StackPanel Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="messagePanel" VerticalAlignment="Stretch" Width="Auto"> 

     </StackPanel> --> 
     <ListView HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
      <local:MessageItem></local:MessageItem> 
     </ListView> 
    </ScrollViewer> 
</Grid> 

一個ListView用戶控件問題:

如果我使用th e將StackPanel註釋掉以保留MessageItems,它將正確收縮MessageItem(並導致文本換行)。如果我使用ListView,它不會縮小。

我已經或多或少知道了爲什麼從研究,但我一直沒能弄清楚如何解決它。據我可以告訴我需要重寫MeasureOverride和/或ArrangeOverride,但我太新了WPF知道我正在做的WTF。 (rimshot)

回答

3

我不知道你爲什麼把ListView放在ScrollViewer裏面,因爲ListView在內部有自己的ScrollView。

爲了讓您的MessageItems包裝,您需要關閉任何水平滾動條,否則容器(ListView或ScrollViewer)將爲MessageItem提供儘可能多的空間,並顯示滾動條。

嘗試

<ScrollViewer ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/> 

<ListView ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/> 

雖然我不知道你甚至不需要ScrollViewer中。

你可能會更好使用ListBox和ItemTemplate而不是ListView和用戶控件

+0

哇,這比我預期的方式更容易。至於ScrollViewer:Resize窗口,所以ListView比窗口大 - >「嘿滾動條沒有出現」 - > Toolbox - > ScrolViewer - >「這正是我需要的! :)就像我說的我是新來的WPF:P – carpat