2

グリッドの2番目の列で使用可能なスペースにlistviewitemsのサイズを設定する際に問題が発生しました。長い説明を持つことができるValidationItemErrorクラスがあります。これは、そのためのDataTemplatexamlです。

<DataTemplate DataType="{x:Type Models:ValidationItemError}">
    <StackPanel>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="20"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <Ellipse Width="10"
                     Height="10"
                     Margin="5,0,0,0"
                     Fill="Crimson" />
            <TextBlock Text="{Binding ColumnName}"
                       Grid.Column="1"
                       FontWeight="Bold" />
        </Grid>
        <TextBlock Text="{Binding Description}"
                   ToolTip="{Binding Description}"
                   Margin="20,0,0,0"
                   TextWrapping="Wrap" />
    </StackPanel>
</DataTemplate>

validateItemErrorsは別のクラスValidationLineItemにグループ化され、これがそのDataTemplateです。

<DataTemplate DataType="{x:Type Models:ValidationLineItem}">
    <StackPanel>
        <Grid Margin="0,10,0,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="35"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBlock Text="Line"
                       FontSize="16"
                       FontWeight="Bold" />
            <TextBlock Text="{Binding LineNumber}"
                       Margin="5,0,0,0"
                       FontSize="16"
                       Grid.Column="1" />
        </Grid>
        <ItemsControl ItemsSource="{Binding ValidationItems}">
        </ItemsControl>
    </StackPanel>
</DataTemplate>

つまり、基本的に、ValidationItemsプロパティに格納されている行番号と複数のValidationItemError/Warningsを格納するvalidationLineItemがあります。そのため、グリッドの左側の列にあるリストビューにそのデータをバインドするだけです。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="75*" />
        <ColumnDefinition Name="GridCell" Width="25*" />
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="1">
        <ListView ItemsSource="{Binding ValidationItems}"                          
                  SelectedItem="{Binding SelectedValidationItem}"                          
                  SelectionChanged="ListViewSelectionChanged">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="Width"
                            Value="{Binding ElementName=GridCell, Path=Width}" />
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </ScrollViewer>
</Grid>

この部分を除いて、すべてうまくレンダリングされます

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="Width"
                Value="{Binding ElementName=GridCell, Path=Width}" />
    </Style>
</ListView.ItemContainerStyle>

説明テキストブロックは幅の設定を無視し、必要なように折り返しません。手動で幅を設定した場合

<Setter Property="Width" Value="100" />

それ以外の

<Setter Property="Width" Value="{Binding ElementName=GridCell, Path=Width}" />

説明テキストブロックは、私が望むように折り返されます。誰かアイデアはありますか?私はここで簡単な何かが欠けていると確信しています。

私はすでにこれも運がなくて試したことがあることに注意する必要があります。

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment"
                Value="Stretch" />
    </Style>
</ListView.ItemContainerStyle>
4

1 に答える 1

4

あなたの問題は、問題を引き起こすListView内部ビルトインがあることです。ScrollViewer

コンテンツをラップしたいだけのように思えます。したがって、を捨てて、これを:ItemContainerStyleに追加します。ListView

ScrollViewer.HorizontalScrollBarVisibility="Disabled"

これにより、水平スクロールバーが無効になり、コンテンツが折り返されます。

お役に立てれば!

完全を期すために:

<ListView ItemsSource="{Binding ValidationItems}"                          
              SelectedItem="{Binding SelectedValidationItem}"                          
              SelectionChanged="ListViewSelectionChanged" 
              ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
于 2011-07-07T12:20:37.280 に答える