Есть Canvas. На него можно дропать изображения. Потом их двигать, изменять размеры и т.д. Вопрос. Как наилучшим образом создать и отобразить на Canvas сетку, размерами скажем 10 на 10 точек? И как потом к ней сделать "прилипание" расположенных на canvas контролов? При условии что:
свойство Background канвы занято цветом фона (что логично), и кисть туда не положишь.
С DrawingBrush вообще проблемы, в том плане что на стареньком железе, на win XP, сетка нарисованная через DrawingBrush, не хочет рисоваться. А надо. На более современных компьютерах рисуется.
Уточняю по просьбам трудящихся. Нужен наиболее оптимальный способ (алгоритм) создать нарисованную сетку на элементе Canvas с использованием net3.5. И способ осуществить прилипание элементов канвы к ней. Я считал что простая отрисовка линий на канве будет подтормаживать.
Ответ
Если вам нужна сетка переменного размера, подпишитесь на изменение размеров Canvas'а и рисуйте вручную:
public YourControlConstructor()
{
InitializeComponent();
UpdateBackPattern(null, null);
}
void UpdateBackPattern(object sender, SizeChangedEventArgs e)
{
var w = Background.ActualWidth;
var h = Background.ActualHeight;
Background.Children.Clear();
for (int x = 10; x < w; x += 10)
AddLineToBackground(x, 0, x, h);
for (int y = 10; y < h; y += 10)
AddLineToBackground(0, y, w, y);
}
void AddLineToBackground(double x1, double y1, double x2, double y2)
{
var line = new Line()
{
X1 = x1, Y1 = y1,
X2 = x2, Y2 = y2,
Stroke = Brushes.Black,
StrokeThickness = 1,
SnapsToDevicePixels = true
};
line.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
Background.Children.Add(line);
}
Для «прилипания» вам нужно проверять координаты перемещаемого объекта, и если они близки к сетке (то есть, x % <шаг сетки> < <расстояние прилипания> или x % <шаг сетки> > <шаг сетки> - <расстояние прилипания>) приводить его координату к кратной размеру сетки.
Комментариев нет:
Отправить комментарий