我试图在DataGrid中创建一个列,它只不过是一个带有纯色的矩形。此列是用以下XAML定义的。
<DataGrid x:Name="MeasurementGrid" AutoGenerateColumns="False"
AlternatingRowBackground="Azure" SelectionUnit="FullRow"
HeadersVisibility="Column" VerticalGridLinesBrush="AntiqueWhite"
HorizontalGridLinesBrush="AntiqueWhite">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Rectangle Width="16" Height="16">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Path=Color, Mode=OneWay}" />
</Rectangle.Fill>
</Rectangle>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Energy" Width="75" Binding="{Binding Path=Energy}"></DataGridTextColumn>
<DataGridTextColumn Header="Field Size" Width="100" Binding="{Binding Path=FieldSize}"></DataGridTextColumn>
<DataGridTextColumn Header="Type" Width="200" Binding="{Binding Path=FriendlyType}"></DataGridTextColumn>
<DataGridTextColumn Header="Depth" Width="75" Binding="{Binding Path=Depth}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>问题是,尽管这个网格的数据源有一个名为"Color“的属性,但在我的XAML中定义的solidcolorbrush笔刷并没有使用这个值。可以看到,我确实有其他的列也被绑定了,并且在运行时进行了适当的绑定。
发布于 2012-08-22 20:31:37
作为WPF的新手,这个问题一开始并不是obivous。此颜色绑定到的自定义数据对象有一个System.Drawing.Color类型的名为“DataGrid”的属性。由于WPF使用System.Windows.Media.Color,我被迫创建了一个自己的值转换类。下面是它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Media;
namespace WpfTchartTest.Converters
{
class WinFormsColorToWpfColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
System.Drawing.Color color = (System.Drawing.Color)value;
System.Windows.Media.Color converted = System.Windows.Media.Color.FromArgb(
color.A, color.R, color.G, color.B);
return converted;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
}然后,我只需要将它作为资源添加到我的用户界面中,并在绑定到WinForms“Color”时使用以下语法……
<UserControl.Resources>
<conv:WinFormsColorToWpfColorConverter x:Key="WinFormsColorToWpfColor" />
</UserControl.Resources>
<SolidColorBrush Color="{Binding Path=Color, Converter={StaticResource ResourceKey=WinFormsColorToWpfColor}}" />发布于 2012-08-22 04:47:38
对不起,我不能复制这个。
我在Visual WPFExpress2010中创建了一个新的C#应用程序,将您的DataGrid复制到MainWindow.xaml中,并修改了MainWindow.xaml.cs中的代码以包含以下内容:
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Media;
namespace MyNamespace
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Color> colors = new List<Color>() { Colors.Red, Colors.Green, Colors.Blue };
MeasurementGrid.ItemsSource = colors.Select(color => new Colored() { Color = color }).ToList();
}
}
public class Colored
{
public Color Color { get; set; }
}
}当我运行这个应用程序时,我在第一列得到了一个带有彩色矩形的网格。
(在实际的应用程序中,类Colored将实现INotifyPropertyChanged,而colors将是ObservableCollection而不是List。出于本演示的目的,我们将把这些细节放在一边。)
https://stackoverflow.com/questions/12059159
复制相似问题