#c_sharp #wpf
Есть Canvas. На него можно дропать изображения. Потом их двигать, изменять размеры и т.д. Вопрос. Как наилучшим образом создать и отобразить на Canvas сетку, размерами скажем 10 на 10 точек? И как потом к ней сделать "прилипание" расположенных на canvas контролов? При условии что: свойство Background канвы занято цветом фона (что логично), и кисть туда не положишь. С DrawingBrush вообще проблемы, в том плане что на стареньком железе, на win XP, сетка нарисованная через DrawingBrush, не хочет рисоваться. А надо. На более современных компьютерах рисуется. Уточняю по просьбам трудящихся. Нужен наиболее оптимальный способ (алгоритм) создать нарисованную сетку на элементе Canvas с использованием net3.5. И способ осуществить прилипание элементов канвы к ней. Я считал что простая отрисовка линий на канве будет подтормаживать.
Ответы
Ответ 1
Если вам нужна сетка переменного размера, подпишитесь на изменение размеров 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 % <шаг сетки> > <шаг сетки> - <расстояние прилипания>) приводить его координату к кратной размеру сетки.
Комментариев нет:
Отправить комментарий