2017-01-28 2 views
1

現在、これは私のXAMLリストビューです: 私は多くの検索を行っていますが、これに対する解決策を見つけることができませんでした。Wpf - テキストブロックの色をランダムに入力すると列が変更される

<ListView x:Name="listView_data" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="20,0,20,5" Width="712" Height="357"> 
     <ListView.View> 
      <GridView x:Name="lvgvc"> 
       <TextBlock.Foreground> 
        <SolidColorBrush Color="black"></SolidColorBrush> 
       </TextBlock.Foreground> 
      </GridView> 
     </ListView.View> 
    </ListView> 

、これはコードビハインドである:

//received data in DataTable (dt) 
    for(int i=0; i < dt.Columns.Count; i++) 
        { 
         GridViewColumn gvc = new GridViewColumn(); 
         gvc.Header = "Column"+i; 
         gvc.Width = 100; 
         gvc.DisplayMemberBinding = new Binding("column"+i); 
         lvgvc.Columns.Add(gvc);  
        } 

       listView_data.Items.Clear(); 
       listView_data.ItemsSource = dt.DefaultView; 

リストビューに列を作成し、datatTableに移入されます。しかし、行は完全に白です。私はlistviewで6行を選択できます。これは、dataTableに6行あり、デバッグ中にDataTableに正しいデータが表示されるためです。どのように私はlistviewで黒のテキストブロックを作ることができます。私はランダムな入力列に応じてテキストブロックを賢明にしたい。

+0

ListView.ItemContainerStyleの設定を見てください。 ListViewのスタイルを設定する実際の例については、Googleを参照してください。任意の場所に任意のXAMLを入力するだけではありません。その方法には数年かかるかもしれません。実際の例を見つけてください。コードを実例に基づいて作成します。 –

答えて

1

DisplayMemberBindingのパスは、列の名前に設定する必要があります。

for (int i = 0; i < dt.Columns.Count; i++) 
{ 
    GridViewColumn gvc = new GridViewColumn(); 
    gvc.Header = "Column" + i; 
    gvc.Width = 100; 
    gvc.DisplayMemberBinding = new Binding(dt.Columns[0].ColumnName); 
    lvgvc.Columns.Add(gvc); 
} 

listView_data.Items.Clear(); 
listView_data.ItemsSource = dt.DefaultView; 

と列内のテキストの色は、XAMLマークアップでItemContainerStyleを定義することによって変更することができます。

<ListView x:Name="listView_data"> 
    <ListView.View> 
     <GridView x:Name="lvgvc"/> 
    </ListView.View> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Foreground" Value="Black" /> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

あなたが別の列に異なる色をしたい場合は、プログラムで各列のDataTemplateをを作成することができます。

const string dataTemplate = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><TextBlock Text=\"{{Binding {0}}}\" Foreground=\"{1}\" /></DataTemplate>"; 

for (int i = 0; i<dt.Columns.Count; i++) 
{ 
    string colour = "Green"; ///change this one based on your colouring logic... 
    DataTemplate template = System.Windows.Markup.XamlReader.Parse(string.Format(dataTemplate, dt.Columns[0].ColumnName, colour)) as DataTemplate; 
    GridViewColumn gvc = new GridViewColumn() { CellTemplate = template }; 
    gvc.Header = "Column" + i; 
    gvc.Width = 100; 
    lvgvc.Columns.Add(gvc); 
} 

listView_data.Items.Clear(); 
listView_data.ItemsSource = dt.DefaultView; 
+0

ありがとうございます!出来た。 – ARr0w

関連する問題