Абстрактный класс Shape
FrameworkElement, который сам унаследован от UIElement. В указанных классах определены члены для работы с изменением размеров, всплывающими подсказками, курсорами мыши и т.п. Благодаря такой цепочке наследования при визуализации графических данных с применением классов, производных от Shape, объекты получаются почти такими же функциональными (с точки зрения взаимодействия с пользователем), как элементы управления WPF.Скажем, для выяснения, щелкнул ли пользователь на визуализированном изображении, достаточно обработать событие MouseDown
Rectangle внутри элемента управления Grid начального окна Window:MouseDown="myRect_MouseDown"/>
то можно реализовать обработчик события MouseDown
private void myRect_MouseDown(object sender, MouseButtonEventArgs e)
{
// Изменить цвет прямоугольника в результате щелчка на нем.
myRect.Fill = Brushes.Pink;
}
В отличие от других инструментальных наборов, предназначенных для работы с графикой, вам
System.Windows.Shapes просто реагируют на зарегистрированные вами события подобно типичному элементу управления WPF (Button и т.д.).Недостаток всей готовой функциональности связан с тем, что фигуры потребляют довольно много памяти. Если строится научное приложение, которое рисует тысячи точек на экране, то использование фигур будет неудачным выбором (по существу таким же расточительным в плане памяти, как визуализация тысяч объектов Button
Помимо функциональности, унаследованной от родительских классов UIElement
FrameworkElement, в классе Shape определено множество собственных членов, наиболее полезные из которых кратко описаны в табл. 26.1.На заметку!
Если вы забудете установить свойстваFill и Stroke, то WPF предоставит "невидимые" кисти, вследствие чего фигура не будет видна на экране!Добавление прямоугольников, эллипсов и линий на поверхность Canvas
Вы построите приложение WPF, которое способно визуализировать фигуры, с применением XAML и С#, и попутно исследуете процесс проверки попадания. Создайте новый проект приложения WPF по имени RenderingWithShapes
MainWindow.xaml на Fun with Shapes!. Модифицируйте первоначальную разметку XAML для элемента Window, заменив Grid панелью DockPanel, которая содержит (пока пустые) элементы Toolbar и Canvas. Обратите внимание, что каждому содержащемуся элементу посредством свойства Name назначается подходящее имя.
picture
Заполните элемент ToolBar
RadioButton, каждый из которых содержит объект специфического класса, производного от Shape. Легко заметить, что каждому элементу RadioButton назначается то же самое групповое имя GroupName (чтобы обеспечить взаимное исключение) и также подходящее индивидуальное имя.
Click="CircleOption_Click">
Click="RectOption_Click">
Click="LineOption_Click">
X1="10" Y1="10" Y2="25" X2="25"
StrokeStartLineCap="Triangle" StrokeEndLineCap="Round" />
Как видите, объявление объектов Rectangle
Ellipse и Line в разметке XAML довольно прямолинейно и требует лишь минимальных комментариев. Вспомните, что свойство Fill позволяет указать кисть для рисования внутренностей фигуры. Когда нужна кисть сплошного цвета, можно просто задать жестко закодированную строку известных значений, а соответствующий преобразователь типа сгенерирует корректный объект. Интересная характеристика типа Rectangle связана с тем, что в нем определены свойства RadiusX и RadiusY, позволяющие визуализировать скругленные углы.Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT