Color [,] 배열을 표시 할 목적으로 만 사용자가 컨트롤을 만들고 싶습니다. 컨트롤 자체는 해당 색상의 NxM 사각형의 사각형을 그려야합니다.WPF : 사용자가 그린 컨트롤에 2D 배열을 표시하는 올바른 방법은 무엇입니까
나는 FrameworkElement에서 상속하기 위해 노력하고있어 및 방법의 OnRender 오버라이드 (override) :
public class CustomControl1 : FrameworkElement
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
public Color[,] ColorCollection
{
get { return (Color[,])GetValue(ColorGridProperty); }
set { SetValue(ColorGridProperty, value); }
}
public static readonly DependencyProperty ColorGridProperty =
DependencyProperty.Register("ColorCollection", typeof(Color[,]), typeof(CustomControl1),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));
protected override void OnRender(DrawingContext drawingContext)
{
if (ColorCollection != null)
{
int dimx = this.ColorCollection.GetLength(0);
int dimy = this.ColorCollection.GetLength(1);
double w = this.ActualWidth/dimx;
double h = this.ActualWidth/dimy;
for (int x = 0; x < dimx; x++)
{
for (int y = 0; y < dimy; y++)
{
SolidColorBrush brush = new SolidColorBrush(ColorCollection[x, y]);
drawingContext.DrawRectangle(brush, null, new Rect(x * w, 0, w, this.ActualHeight));
}
}
}
}
}
문제는 내가 기본 배열의 요소를 변경할 때 내 제어를 다시 그려야하지 않습니다이다. 그것은 완전히 새로운 배열을 할당하거나 비록 컨트롤의 크기를 조정할 때 작동합니다.
분명히 컬렉션의 내부 변경 사항에 대해 컨트롤에 알리는 또 다른 클래스가 필요합니다. INotifyCollectionChange와 ObservableCollection을보고 있었지만 발견 된 유일한 기사는 컬렉션을 사용자 정의 사용자가 아닌 기존 컨트롤에 바인딩하는 것이 었습니다. 그래서 나는 혼란스러워서이 지점에 머물렀다.