Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помещение визуальных объектов в оболочку элемента, по Мак-Дональду 
:(
    Опции темы
Garcian
  Дата 12.11.2012, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Здраствуйте. Пример из книги Мак-Дональда. Добавление визуальных элементов в оболочку элемента. 
Не понимаю как реализовать задачу - простое добавление кружков по щелчку мыши. После создания эти кружки должны быть доступны для обработки.
В книге так: создается класс наследуемый от Canvas (он хранит коллекцию визуальных элементов)
Код

public class DrawingCanvas : Canvas
        {
            private List<Visual> visuals = new List<Visual>();
            protected override int VisualChildrenCount
            {
                get
                {
                    return base.VisualChildrenCount;
                }
            }
            protected override Visual GetVisualChild(int index)
            {
                return visuals[index];
            }

            public void AddVisual(Visual visual)
            {
                visuals.Add(visual);
                base.AddVisualChild(visual);
                base.AddLogicalChild(visual);
            }

            public void DeleteVisual(Visual visual)
            {
                visuals.Remove(visual);
                base.RemoveVisualChild(visual);
                base.RemoveLogicalChild(visual);
            }
        }

Далее сказано: DrawingCanvas объявляется в XAML разметке окна
Код

 <local:DrawingCanvas x:Name="drawingSurface" Background="White" 
                    ClipToBounds="True" 
                    MouseLeftButtonDown="drawingSurface_MouseLeftButtonDown" 
                    MouseLeftButtonUp="drawingSurface_MouseLeftButtonUp" 
                    MouseMove="drawingSurface_MouseMove" />


Для начала, куда это добавлять? Никак не пойму, ничего не получается!  smile 

В частности, пробовал просто присвоить имя для Canvas и создать событие, и обработать его. Но тогда мне не доступны методы drawingSurface. Помогите!

--------------------
Неродивый студент
PM MAIL   Вверх
Garcian
Дата 12.11.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Сделал так:
Код

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <local:DrawingCanvas x:Name="drawingSurface" Background="White" ClipToBounds="True" MouseLeftButtonDown="drawingSurface_MouseLeftButtonDown" MouseDown="drawingSurface_MouseDown"></local:DrawingCanvas>
</Window>


Добавил рисование квадратов
Код

        private Brush drawingBrush = Brushes.AliceBlue;
        private Brush selectedDrawingBrush = Brushes.LightGoldenrodYellow;
        private Pen drawingPen = new Pen(Brushes.SteelBlue, 3);
        private Size squareSize = new Size(30, 30); 

// не отлавливает

        private void drawingSurface_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Point pCl = e.GetPosition(drawingSurface);
            // Создание, рисование и добавление нового квадрата. 
            DrawingVisual visual = new DrawingVisual();
            DrawSquare(visual, pCl);
            drawingSurface.AddVisual(visual);
        }

        private void DrawSquare(DrawingVisual visual, Point topLeftCorner)
        {
            using (DrawingContext dc = visual.RenderOpen())
            {
                Brush brush = drawingBrush;
                dc.DrawRectangle(brush, drawingPen,
                new Rect(topLeftCorner, squareSize));
            } 

        }

        private void drawingSurface_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Point pCl = e.GetPosition(drawingSurface);
            // Создание, рисование и добавление нового квадрата. 
            DrawingVisual visual = new DrawingVisual();
            DrawSquare(visual, pCl);
            drawingSurface.AddVisual(visual);
        }


Нажатие левой кнопки мыши не отлавливает, поэтому добавил просто mouseDown. Квадраты не рисуются, ПОЧЕМУ? 
--------------------
Неродивый студент
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1043 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.