Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > WPF динамическая линия


Автор: Pritorian 3.4.2010, 23:20
Здравствуйте. Начал разбираться в WPF и возник такой вопрос:
допустим, есть на форме два элипса. Необходимо между ними рисовать линию. Причём элипсы можно таскать и линия должна перемещаться соответственно. Вопрос в следующем - нужно ли писать полностью перерисовку линий, или этот процесс как-то упрощён? Если можно, пример проекта/кода был бы очень кстати.  Ну или хотя-бы отсылка на литературу (если можно не на абстрактный МСДН а на статью).

Спасибо за внимание.

Автор: WolfTheGrey 6.4.2010, 00:39
Както так:
Код

<Canvas Width="600" Height="800">
        <Ellipse Name="clipsa" Stroke="Black" MouseMove="clipsa_MouseMove" StrokeThickness="2" Width="50" Height="75"
                 Canvas.Left="0" Canvas.Top="211" Fill="Blue" Opacity="0.4" MouseLeftButtonDown="clepka_MouseDown" MouseLeftButtonUp="clepka_MouseUp" />
        <Ellipse Name="clepka" Stroke="Black" MouseMove="clepka_MouseMove" StrokeThickness="2" Width="50" Height="75" Canvas.Left="113" 
                 Canvas.Top="33" Fill="Blue" Opacity="0.4" MouseLeftButtonDown="clepka_MouseDown" MouseLeftButtonUp="clepka_MouseUp" />
        
        <Line Stroke="Black" StrokeThickness="2" Name="palka"
              X1="{Binding ElementName=clipsa, Path=Canvas.Left.X}" :)
              Y1="{Binding ElementName=clipsa, Path=Canvas.Left.Y}" :)
              X2="{Binding ElementName=clepka, Path=Canvas.Left.X}" :)
              Y2="{Binding ElementName=clepka, Path=Canvas.Left.Y}"/> :)
    </Canvas>


но к сожалению без процедурного кода не обошлось:
Код

        Point clipsa_point;
        Point clepca_point;
        bool is_mouse_enter = false; \\захват мыши,
        public DragElipse()
        {
            InitializeComponent();
        }

        private void clepka_MouseMove(object sender, MouseEventArgs e)
        {
            Point pt = e.GetPosition(this);
            palka.X1 = pt.X;
            palka.Y1 = pt.Y;
            Ellipse el = (Ellipse)e.Source;
            if (is_mouse_enter)
            {
                Canvas.SetLeft(el, pt.Y);
                Canvas.SetRight(el, pt.X);  \\больше ни какого способа не придумал, чтоб сдвинуть с места елипс.
            }
            else
                clepca_point = pt;
        }

        private void clipsa_MouseMove(object sender, MouseEventArgs e)
        {
            Point pt = e.GetPosition(this);
            palka.X2 = pt.X;
            palka.Y2 = pt.Y;

            Ellipse el = (Ellipse)e.Source;
            if (is_mouse_enter)
            {
                Canvas.SetLeft(el, pt.Y);
                Canvas.SetRight(el, pt.X);
            }
            else
                clepca_point = pt;
        }

        private void clepka_MouseDown(object sender, MouseButtonEventArgs e)
        {
            is_mouse_enter = true;
        }

        private void clepka_MouseUp(object sender, MouseButtonEventArgs e)
        {
            is_mouse_enter = false;
        }


Добавлено через 2 минуты и 35 секунд
подскажите как определить нажатость мыши при помощи:
Код

MouseButtonState.Pressed


гдето в книжке видел, а найти немогу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)