2

Groupbox 内に Listbox があり、ListboxItems も XAML で定義されています。リストボックスは次のように定義されています。

<ListBox Name="lvAvoidCountry" Margin="5,5,5,5"  
    Background="Transparent" 
    ScrollViewer.VerticalScrollBarVisibility="Visible"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" >

アイテムは次のように定義されます。

<ListViewItem >
  <CheckBox Name="chkAlbanien" Tag="55">
    <StackPanel Orientation="Horizontal">
      <Image Source="images/flag_albania.png" Height="30"></Image>
      <TextBlock Text="Albanien" Margin="5,0,0,0"></TextBlock>
    </StackPanel>
  </CheckBox>
</ListViewItem>

Scrollviewer 設定を削除すると、水平スクロールが表示され、アイテムが適切にフォーマットされます-正しい幅です。scrollviewer 設定を使用すると、すべてのアイテムがリストボックスに配置されるように、アイテムが切り取られます。(たとえば、フラグが表示され、チェックボックスが表示されますが、テキストは「Alba」のみです)。

ヒントをありがとう!

4

2 に答える 2

3

名前が示すように、ScrollViewer.HorizontalScrollBarVisibility="Disabled"水平スクロールを無効にします。それをしても、ListBoxItems が長すぎると、途切れてしまいます。TextWrappingStackPanel は ListBox に収まるように拡大または縮小することはなく、TextBlockに追加しても、ListBox に収まるようにアイテムを「ラップ」しません。とても頑固です。あなたの主な問題はそのStackPanelだと思います。

StackPanel の代わりに、次のように定義された 2 つの列を持つ Grid を使用してみてください。

<ListViewItem >
  <CheckBox Name="chkAlbanien" Tag="55">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Image Grid.Column="0" Source="images/flag_albania.png" Height="30"/>
        <TextBlock Grid.Column="1"
                   TextWrapping="Wrap"
                   Text="Albanien" Margin="5,0,0,0"/>
    </Grid>
  </CheckBox>
</ListViewItem>

Auto画像列を「シュリンクラップ」し*、テキストに残りのすべてのスペースを与えます。TextWrappingそれでも長すぎる場合に備えて、テキストブロックに追加します。

編集:より完全なコード例を追加し、私の答えを少し変更しました。

于 2010-03-08T10:06:48.157 に答える
0

リストボックスで垂直スクロールが必要な場合は、スタックパネルに配置せず、代わりにグリッドを使用してください。

于 2010-07-14T15:37:48.133 に答える