Wpf - 文本块颜色在随机输入时逐列变化
Wpf - Textblock color change column wise on random input
目前这是我的 XAML 列表视图:
我已经做了很多搜索,但我找不到解决这个问题的方法,我们将不胜感激,谢谢。
<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;
Listview 创建列并填充 datatTable。但是行完全是白色的。我可以 select listview 中的 6 行,因为 dataTable 中有 6 行,并且在调试 DataTable 时显示其中的正确数据。我怎样才能使列表视图中的文本块颜色变黑。我想要根据随机输入列的文本块。
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;
目前这是我的 XAML 列表视图: 我已经做了很多搜索,但我找不到解决这个问题的方法,我们将不胜感激,谢谢。
<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;
Listview 创建列并填充 datatTable。但是行完全是白色的。我可以 select listview 中的 6 行,因为 dataTable 中有 6 行,并且在调试 DataTable 时显示其中的正确数据。我怎样才能使列表视图中的文本块颜色变黑。我想要根据随机输入列的文本块。
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;