c# - 带有 GridViewColumn 和 DataTemplate 代码的 WPF ListView
问题描述
我在 WPF 应用程序中有 ListView 和 GridView。我在 xaml 中添加了几个 Gridviewcolumn,它使用下面的代码具有 celltemplate 和 DataTemplate。
<GridView x:Name="DvGridView">
<GridViewColumn Header="Device Name" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DeviceName}">
<TextBlock.Background>
<SolidColorBrush Color="{Binding DeviceColor}"/>
</TextBlock.Background>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
我想根据用户选择在后面的代码中添加 Gridviewcolumns。我试过下面的代码
GridViewColumn nameColumn = new GridViewColumn();
nameColumn.Header = columnInfo;
nameColumn.Width = 120;
var text = new FrameworkElementFactory(typeof(TextBlock));
text.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Center);
Binding binding = new Binding("DeviceColor");
binding.Source = PmcDataInfoCollection;
SolidColorBrush brush = new SolidColorBrush();
BindingOperations.SetBinding(brush, SolidColorBrush.ColorProperty, binding);
text.SetBinding(TextBlock.TextProperty, new Binding(col));
text.SetBinding(TextBlock.BackgroundProperty, binding);
DataTemplate dataTemplate = new DataTemplate();
dataTemplate.VisualTree = text;
nameColumn.CellTemplate = dataTemplate;
DvGridView.Columns.Add(nameColumn);
“DeviceColor”的 TextBlock.BackgroundProperty 绑定无法正常工作。它始终以白色显示。请让我知道如何解决此问题。
解决方案
您正在绑定Color
SolidColorBrush 的属性,但实际上并没有使用该 Brush。
因此,不要将 Binding 应用于 TextBlock 的 Background 属性,只需分配 Brush:
Binding binding = new Binding("DeviceColor");
binding.Source = PmcDataInfoCollection;
SolidColorBrush brush = new SolidColorBrush();
BindingOperations.SetBinding(brush, SolidColorBrush.ColorProperty, binding);
text.Background = brush;
为了能够将绑定直接应用于背景属性,您需要一个将颜色转换为画笔的转换器:
text.SetBinding(TextBlock.BackgroundProperty,
new Binding
{
Path = new PropertyPath("DeviceColor"),
Source = PmcDataInfoCollection,
Converter = new ColorToBrushConverter()
});
转换器类:
public class ColorToBrushConverter : IValueConverter
{
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
return new SolidColorBrush((Color)value);
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
return ((SolidColorBrush)value).Color;
}
}
推荐阅读
- python - 在字典中添加项目,但宝贵的价值似乎被 Python 中的 for 循环覆盖
- javascript - Xrm.Navigation.navigateTo formid 仅加载最后使用的表单
- azure - 如何忽略来自特定租户的 Azure 订阅?
- javascript - 被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头 Socket.io 错误中的错误如何解决?
- java - zuul 中的 HTTPS 代理支持
- javascript - UIRouter - 在没有滚动效果的情况下将用户重置到页面顶部(ReactJs)
- powershell - 使用 PowerShell 和 Selenium 在 Chrome 中打开用户配置文件
- javascript - Gatsby:在使用带有 JavaScript 的 Bootstrap 组件构建项目时,服务器端渲染期间“文档”不可用
- python - 使用索引对列表进行排序,以便轻松删除项目
- python - Python获取共享内存:大小不一致