2009-09-04 36 views
9

WPF GridViewで列の背景を設定したいと思っています。多くのGoogleの結果は、GridViewColumn.CellTemplateを設定して列の外観を変更することを指摘しています。しかし、私は、背景色を設定するときに問題を抱えています。それはセルを埋めるためにストレッチではないです:WPFで列の背景を設定するListView/Gridview

<Window x:Class="ScratchPadWpf.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Width="300" Height="300"> 
    <Grid> 
    <ListView ItemsSource="{Binding}"> 
     <ListView.View> 
     <GridView> 
      <GridViewColumn> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
       <Grid Background="Red"> 
        <TextBlock Text="{Binding FirstName}"/> 
       </Grid> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
       <Grid Background="Yellow"> 
        <TextBlock Text="{Binding LastName}"/> 
       </Grid> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
     </ListView.View> 
    </ListView> 
    </Grid> 
</Window> 

そして、良い対策のためのxaml.cs:

Ugly Grid View

をここで私が働いているXAMLだ

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
    InitializeComponent(); 
    DataContext = new[] 
    { 
     new {FirstName = "Jim", LastName = "Bob"}, 
     new {FirstName = "Frank", LastName = "Smith"}, 
     new {FirstName = "Tooth", LastName = "Paste"}, 
    }; 
    } 
} 

設定DataTemplateのグリッドの幅と高さが負のマージンを持つセルよりも大きくなると、近い結果が得られますが、列のサイズを変更しても問題は再び発生します。

<Grid Background="Yellow" Height="22" Width="50" Margin="-6"> 

Still Ugly

色でセルを埋めるための方法はありますか?

<ListView ItemsSource="{Binding}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

結果:

答えて

10

ItemContainerStyleHorizontalContentAlignment設定し

alt text

+0

これは、幅を設定する必要はありません。ただし、2つの列の間にはまだギャップがあります。それを閉じる方法はありますか? – statenjason

+5

悲しいことに、GridViewRowPresenterは余白を6,0,6,0にハードコーディングします。私はこれを回避するにはかなりの労力が必要だと恐れています。 –

+0

問題を解決するには、グリッドの余白を-6,0、-6,0に設定します。 –

3

は古いスレッドを掘るのが、私はこの

<Grid Background="{Binding backGround}" Margin="-6,0,-6,0"> 
    <TextBlock Margin="6,0,6,0" Text="{Binding myText}" TextAlignment="Right" /> 
</Grid> 

のための危険な修正を見つけました背景色が塗りつぶされるように余白を移動するテキスト全体が正しい位置に表示されるようにセル全体を移動します。それが適切に修正されるまで今のところ動作します。

+2

これを掘り出して、すでに掘り出したスレッドを作成します。私はこの現象が「固定」されているかどうかを知りたいのですか? 私は4年間のコーディングから離れてWPFを習得しようとしていますが、異なる色のシームレスな列の背景を作成するための優れたソリューションを見つけることができないようです。現代的/より良い方法に私を指すことができる誰もが歓迎されています:D – Grim

関連する問題