2012-03-20 2 views
0

私はこのように定義されたGridViewをしました:WPF。 GridViewColumnのセルの高さにバインドしますか?

  <ListView x:Name="colorLegend" Background="Transparent" ItemsSource="{Binding /Colors}"> 
      <ListView.Resources> 
       <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </Style> 
      </ListView.Resources> 
      <ListView.View> 
       <GridView ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}"> 
        <GridViewColumn Header="Image" Width="100"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Border Background="{Binding Brush}" Height="20" Width="40" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="auto" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

私は最初のセル内部の境界線の高さは、セル列の高さと同じ高さにしたいです。 ボーダーの高さを2番目のセルの高さにバインドできますか?

私が望むのは、変更に合わせて最初にサイズを変更する2番目のセルと境界線のフォントサイズを変更できるようにすることです。

ありがとうございます!

+0

希望どおりにスナップショットを使用して詳細を教えてください。最初の列の 'Border'は列全体の境界線ではありませんが、それは各セルに適用されます。また、2番目の列は視覚的には列として認識されず、単にセルの垂直配列として認識されます。だから、あなたはグラフィカルに達成するために必要なものを精緻化する必要があります。 –

+0

良い点!私は私の質問を変える必要があります。私は_CELL_の高さを意味した –

答えて

-1

代わりに高さを使用して、私はむしろ、この場合にVerticalAlignment=Stretchを使用します。

<DataTemplate> 
    <Border Background="{Binding Brush}" VerticalAlignment="Stretch" Width="40" /> 
</DataTemplate> 

これはトリック

を行う必要があります(あなたもちょうど安全のため、この場合にはminHeightのが必要になる場合があります)

NB:VerticalAlignmentプロパティを使用すると、Height = *と同等の値を設定することもできます。この場合、高さを単純にスペースを埋めることができますが、バインドできません。何でもVerticalAlignment = StretchまたはHorizo​​ntalAlignment = Stretchは実際には非常に有名ですが、あまり知られていませんが、悲しいことです。

編集:これが動作しない場合、あなたはこのような親に結合しようとする場合があります:

<DataTemplate> 
    <Border Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorLevel=1}}" Background="{Binding Brush}" Width="40" /> 
</DataTemplate> 

(免責事項:私はGridViewColumnのCellTemplateでこれを試してみてください、そうではないしませんでした

編集2:上記のものがうまくいかなければ、テンプレート内のグリッドやパネルをインターカレートして高さを継承して、枠線に転送できるようにしてください。 (私の知る限り、グリッドとパネルは限り測定の継承が懸念している国境のように動作しません):

<DataTemplate> 
    <Grid> 
     <Border Background="{Binding Brush}" VerticalAlignment="Stretch" Width="40" /> 
    </Grid> 
</DataTemplate> 

か:

<DataTemplate> 
    <Grid Name="grid" VerticalAlignment="Stretch"> 
     <Border Background="{Binding Brush}" Width="40" Height="{Binding ActualHeight ElementName=grid}" /> 
    </Grid> 
</DataTemplate> 
+0

私はVerticalAlignmentを設定しようとしましたが、それは動作しません。ボーダーが表示されていないので、高さが0に設定されているようです。 MinHeightを使用すると、その値が常に使用されます。 –

+0

arg、それは私のdataGrid CellTemplateで働いていて、なぜこれがGridViewで動作しないのか分かりません。とにかく、他のオプションの私の編集を参照してください... – David

+0

私はあなたを撃つことはありません!約束する。 :)とにかく、それは仕事をしなかった。タイプを特定する必要があるというエラーが表示されました。どのようなタイプの親であるかをどのように把握できますか?私は運がないGridViewColumnを試してみました。 –

4

私は最終的にそれがGridViewPresenterにancestorTypeを指定することで、作業持っています、このような。

<Border Background="{Binding Brush}" Width="40" Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GridViewRowPresenter}}, Path=ActualHeight}" /> 
+0

この問題に対する他のアプローチとは異なり、これは私の仕事です。もし私がこれをさらにアップヴォーヴすることができたら私はそうするでしょう。 –

関連する問題