我将一个ItemsControl绑定到名为SwatchThumbnails的可观察集合,该集合将包含数据以生成矩形。矩形可以有1-3个与之相关的颜色,并且在渲染时需要显示多种颜色。我想我明白如何将一种颜色绑定到填充,但我需要一种方法来绑定多达三个,并让它们均匀显示。如何才能做到这一点?如何绑定多个颜色来填充WPF中的矩形?
这是我的XAML:
<ScrollViewer x:Name="sv_Thumbnails" Grid.ColumnSpan="2" Grid.Row="1" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
<ItemsControl x:Name="ug_Thumbnails" ItemsSource="{Binding SwatchThumbnails, ElementName=mainWindow}">
<ItemsControl.ItemsPanel >
<ItemsPanelTemplate>
<UniformGrid Columns="6" RenderTransformOrigin="0,0.5" Cursor="Hand">
<Rectangle Width="50" Height="50" Fill="{Binding Color}" Margin="0 0 5 0" />
</UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
我最初将通过C#代码中的矩形进UniformGrid,所以我有一个用于分离出的颜色写的原代码。基本上,这是我用于生成矩形的原始代码:
System.Windows.Shapes.Rectangle swatch = new System.Windows.Shapes.Rectangle();
swatch.Width = 50;
swatch.Height = 50;
swatch.Margin = new Thickness(0, 5, 5, 0);
swatch.StrokeThickness = 1;
swatch.Stroke = System.Windows.Media.Brushes.Gray;
swatch.Name = "s_" + _name.ToString();
double groupsize = 100/_colors.Count();
DrawingBrush blackBrush = new DrawingBrush();
DrawingGroup checkersDrawingGroup = new DrawingGroup();
List<SolidColorBrush> brushes = _colors;
double location = 0;
for (int i = 0; i < _colors.Count(); i++)
{
GeometryDrawing drawing = new GeometryDrawing(brushes[i], null,
new RectangleGeometry(new Rect(0, location, groupsize, groupsize)));
checkersDrawingGroup.Children.Add(drawing);
location += groupsize;
}
blackBrush.Drawing = checkersDrawingGroup;
swatch.Fill = blackBrush;
swatch.MouseUp += new MouseButtonEventHandler(loadSwatchResources);
最后,这里是我可观察的集合和色板缩略图定义。
private ObservableCollection<SwatchThumbnail> swatchThumbnails = new ObservableCollection<SwatchThumbnail>();
public ObservableCollection<SwatchThumbnail> SwatchThumbnails
{
get { return swatchThumbnails; }
set { swatchThumbnails = value; }
}
public class SwatchThumbnail : INotifyPropertyChanged
{
public string name { get; set; }
public List<Color> colors { get; set; }
public bool selected { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
感谢您的支持,并对我的延迟表示歉意。我正在尝试您的解决方案,但矩形行项目给我一个错误。 “属性ItemsTemplate不支持”矩形“类型的值,这对我来说真的很奇怪, – Yecats 2014-11-09 17:36:56
@Yecats是的,这是我愚蠢的错误,请参阅更新的代码 – 2014-11-09 17:40:21
感谢它让我过去错误,但我遇到了麻烦我认为,我已经确认observablecollection有三个项目,当我运行程序时,没有显示任何内容,转换器上的断点从来没有触发,这使我认为绑定可能关闭了吗? – Yecats 2014-11-09 17:57:15