2011-07-07 4 views
2

グリッドの2番目の列で利用可能なスペースのサイズにlistviewitemsを取得する際に問題があります。私は長い説明を持つことができるValidationItemErrorクラスを持っています。これはそのためのDataTemplate xamlです。WPF ListViewItem幅のバインディングが期待どおりに機能していません

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

validationItemErrorsが別のクラス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 /警告を格納validationLineItemを有します。だから、私はグリッドの左の列にあるリストビューにそのデータをバインドするだけです。すべての

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

この部分を除いて細かいレンダリング

説明テキストブロックは、幅設定を無視し、私はそれがする必要があるように折り返されません。 I手動

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

代わりに

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

Iが希望のようにラップテキストブロックの説明のように幅を設定した場合。 誰もが考えている?私はここで何か簡単なことがないと確信しています。

私はすでにこれも運が無かったのですが、私は注意してください。

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

ない本当の答えは、私はコメントとして追加します。 listviewitemの幅をセルの代わりにグリッドにバインドしようとしましたか?また、それを試みる場合は、ActualWidthではなくWidthを使用してください。 Horizo​​ntalContentAlignmentではなく、Horizo​​ntalAlignmentを伸ばすように設定することもできます。それがうまくいけば、スヌープを使って、どの要素が正確にサイズ変更されていないかを調べることをお勧めします。スヌープでは、オンザフライで値を変更することもできます。ここで何が起こっているのかをさらにテストできます。 – dowhilefor

答えて

4

あなたの問題はListViewが問題の原因となる内部buildin ScrollViewerを持っていることです。

あなたはコンテンツをラップしたいと思うようです。だから、ItemContainerStyleを捨てそしてListViewにこれを追加します。

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

これは、水平スクロールバーを無効にし、あなたのコンテンツがラップになります!

希望すると便利です。完全のために

<ListView ItemsSource="{Binding ValidationItems}"       
       SelectedItem="{Binding SelectedValidationItem}"       
       SelectionChanged="ListViewSelectionChanged" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" /> 
+0

これは完璧に機能し、同時にxamlの6行を取り除きました。 –

関連する問題