【发布时间】:2014-11-10 02:31:31
【问题描述】:
我将 ItemsControl 绑定到名为 SwatchThumbnails 的可观察集合,该集合将包含数据以生成矩形。矩形可以有 1-3 种颜色与之关联,并且在渲染时需要显示那么多颜色。我想我知道如何将一种颜色绑定到填充上,但我需要一种方法来绑定最多三种颜色并让它们均匀显示。如何做到这一点?
这是我的 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;
}
【问题讨论】: