Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 19:50   #11
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от Goldcoding Посмотреть сообщение
Вот эта программа подойдет для начинающих в WPF. Рисует окружность, эллипс и т.д.
Это что прикол? Такое я и сам могу написать. Просто брать деньги за пример как-то странно.
Casper-SC вне форума Ответить с цитированием
Старый 14.12.2011, 09:38   #12
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Casper-SC Посмотреть сообщение
Это что прикол? Такое я и сам могу написать. Просто брать деньги за пример как-то странно.
Вы и в правду за год (как я понял) не решили эту проблему? WPF, я лично, никогда не рисовал, тем более линию. Вам для этого предоставляется обширный набор компонент, вы создаете новый и распологаете указывая необходимые параметры для него. Не надо тут ничего рисовать, движок WPF сам отрисует когда ему надо этот компонент. Никогда проблем не возникало, работает нормально.
BOBAH13 вне форума Ответить с цитированием
Старый 10.01.2012, 05:24   #13
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Сообщение

Если тема еще кого-то волнует, то привожу решение. Около двух дней искал информацию по данному вопросу, облазил кучу русскоязычных и зарубежных сайтов и с горем пополам нашел! Привожу участок "чернового кода", осуществляющий рисование эллипса и линии на объекте Image:
XAML:
Код:
<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    
	x:Class="WpfApplication1.MainWindow"
	x:Name="Window"
	Title="MainWindow"
	Width="640" Height="480">	

	<Grid x:Name="df">
		<Button Content="Button" Height="190" Margin="120,39,242,210" Width="262" Click="Button_Click" />
		<Button Content="Button" HorizontalAlignment="Right" Height="120" Margin="0,137,46,0" VerticalAlignment="Top" Width="120" Background="#FFDEC400" Click="Button_Click_1" />
        <ScrollViewer Height="162" HorizontalAlignment="Left" Margin="56,263,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="525" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <Image Height="Auto" Name="image2" Stretch="Fill" Width="Auto" />
        </ScrollViewer>
    </Grid>
</Window>
Комментарии: объект ScrollViewer необходим для того, чтобы отобразить рисунок любого размера и пользователь мог с помощью скроллинга просмотреть его весь; в него включен объект Image, который непосредственно и отображает рисунки. Размеры Image заданы "Auto" для того, чтобы он мог растягиваться и сжиматься при помещении большой\малой картинки
Непосредственно код на C#:
Код:
namespace WpfApplication1
{
	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			this.InitializeComponent();

			// Insert code required on object creation below this point.
		}

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            /*LineGeometry MyLine1 =new LineGeometry(new Point(0, 0),new Point(100, 50));

            GeometryDrawing MyDrawing =new GeometryDrawing();
            MyDrawing.Pen =new Pen(Brushes.Blue, 1);
            MyDrawing.Geometry = MyLine1;

            image1.Source =new DrawingImage(MyDrawing);*/

        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            //http://www.i-programmer.info/program...ngvisual-.html(откуда была позаимствована идея решения примера)
            
            LineGeometry myLine1 = new LineGeometry(new Point(0, 0), new Point(300, 400));//создаем элемент, рисующий линию
            EllipseGeometry myEllipse = new EllipseGeometry(new Point(350,350), 200, 200);//создаем элемент, рисующий эллипс
            
            

            GeometryDrawing myDrawing1 = new GeometryDrawing();
            myDrawing1.Pen = new Pen(Brushes.Aqua, 1);
            myDrawing1.Geometry = myLine1;//грубо говоря, рисуем созданую линию

            GeometryDrawing myDrawing2 = new GeometryDrawing();
            myDrawing2.Pen = new Pen(Brushes.Aqua, 1);
            myDrawing2.Geometry = myEllipse;//рисуем эллипс

            DrawingGroup myDrawingGroup = new DrawingGroup();//будем добавлять несколько элементов, поэтому создаем DrawingGroup
                myDrawingGroup.Children.Add(myDrawing1);//добавляем нарисованную выше линию
                myDrawingGroup.Children.Add(myDrawing2);//добавляем нарисованный выше элипс


            myLine1 = null;
            myEllipse = null;
            myDrawing1 = null;
            myDrawing2 = null;
              GC.Collect(0);//вызываем сборку мусора

            image2.Source = new DrawingImage(myDrawingGroup);//отображаем в image2 отрисованые элементы
            
        }
	}
}
Может быть код получился несколько корявый, но он работает. Был в полном ауте, когда не нашел для WPF аналога CreateGraphics WinForms. Как пишут, якобы вся вот эта "мутотень" сделана для того, чтобы можно было без проблем масштабировать элементы(как понял, в WPF используется векторная графика).
Еще раз привожу некоторые ссылки, информация с которых помогла решить задачу: 1, 2, 3
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.

Последний раз редактировалось Mixim; 10.01.2012 в 05:36.
Mixim вне форума Ответить с цитированием
Старый 10.01.2012, 14:21   #14
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию

Перелопатил еще кучу ссылок и нашел гораздо более простой способ рисования в WPF(именно то, что мне и нужно было):
Код:
            DrawingVisual drawingVisual=new DrawingVisual();
                DrawingContext dc = drawingVisual.RenderOpen();
                    dc.DrawLine(new Pen(Brushes.Yellow, 4), new Point(0,0), new Point(100,100));
                    dc.DrawRectangle(Brushes.Black, new Pen(Brushes.Black,4), new Rect(10,10,100,100));
                dc.Close();
            image1.Source = new DrawingImage(drawingVisual.Drawing);
Спасибо книге Мэтью Мак-Дональда - "WPF 4: Windows Presentation Foundation в .NET 4.0 с примерами на C# 2010 для профессионалов"
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дайте мне несколько советов на тему рисования Eros C++ Builder 2 18.05.2010 12:11
Databinding in WPF Paysockee Общие вопросы .NET 0 21.08.2009 14:04
УВАЖАЕМЫЕ ПРОГРАММИСТЫ ОБЬЯСНИТЕ МНЕ ПОЖАЛУЙСТА ДИЛЕТАНТУ . дмитрий kjuby Свободное общение 1 13.07.2009 09:43
Раскройте секрет в файле (найти формулу) Jon63 Microsoft Office Excel 3 06.10.2007 17:04