Laden...

[gelöst] WPF: Position d. Ecke eines Controls auf ein anderes (darüberliegendes) Control projizieren

Erstellt von tonka vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.707 Views
tonka Themenstarter:in
373 Beiträge seit 2006
vor 14 Jahren
[gelöst] WPF: Position d. Ecke eines Controls auf ein anderes (darüberliegendes) Control projizieren

Hallo,

gibt es eine Möglichkeit, die vier Ecken eines Controls auf ein darüberliegendes zu projizieren. Ich habe eine Image-Control und über diesem ist ein Canvas das aber größer als das Image-Control ist. Im Canvas zeichne ich ein Grid! Nun müsste ich aber wissen wo die Ecken des Image-Controls auf meinem Canvas liegen. Mit der Mouse geht das ja auch, gibt es hier irgendwas?

MfG
Tonka

U
1.578 Beiträge seit 2009
vor 14 Jahren

du hast ja links und oben, da kannst du die anderen beiden ecken errechnen wenn du ActualWidth und ActualHeight dazu rechnest

tonka Themenstarter:in
373 Beiträge seit 2006
vor 14 Jahren

Versteh nicht wie du das meinst. Hier ist ein Forum-Eintrag, wo es ums gleiche Thema gegangen ist und hier ist von FrameworkElement.transformToAncestor und FrameworkElement.transformToDescendant die Rede. Jedoch habe ich das Problem, das mein Image und mein Canvas auf der gleichen Ebene liegen!

MfG

U
1.578 Beiträge seit 2009
vor 14 Jahren

dann versteh ich nicht was genau du willst bzw hast - zeig ma dein genauen aufbau und was du erreichen willst

tonka Themenstarter:in
373 Beiträge seit 2006
vor 14 Jahren

So, habs jetzt selbst geschafft.

Der folgende Code projiziert die vier Ecken eines UIElements auf ein anderes UIElement:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


    public static class UIHelper
    {
        public static Boolean GetUIElementCornersRelativTo(UIElement Base,
                                                    UIElement RelativeTo,
                                                    ref Point TopLeft,
                                                    ref Point BottomLeft,
                                                    ref Point BottomRight,
                                                    ref Point TopRight,
                                                    ref String Message)
        {
            try
            {
                if (Base == null)
                {
                    throw new Exception("Base UIElement is null");
                }
                if (RelativeTo == null)
                {
                    throw new Exception("RelativTo UIElement is null");
                }

                TopLeft = Base.TranslatePoint(new Point(0, 0), RelativeTo);
                BottomLeft = Base.TranslatePoint(new Point(0, Base.RenderSize.Height), RelativeTo);
                BottomRight = Base.TranslatePoint(new Point(Base.RenderSize.Width, Base.RenderSize.Height), RelativeTo);
                TopRight = Base.TranslatePoint(new Point(Base.RenderSize.Width, 0), RelativeTo);

                Message = "OK";
                return true;
            }
            catch (Exception ex)
            {
                Message = ex.Message;
                return false;
            }
        }
        public static Boolean GetPointRelativTo(UIElement Base,
                                         UIElement RelativeTo,
                                         Point ToProjectPoint,
                                         ref Point Result,
                                         ref String Message)
        {
            try
            {
                if (Base == null)
                {
                    throw new Exception("Base UIElement is null");
                }
                if (RelativeTo == null)
                {
                    throw new Exception("RelativTo UIElement is null");
                }

                if (ToProjectPoint == null)
                {
                    throw new Exception("To project point is null");
                }

                Result = Base.TranslatePoint(ToProjectPoint, RelativeTo);

                Message = "OK";
                return true;
            }
            catch (Exception ex)
            {
                Message = ex.Message;
                return false;
            }
        }
    }


MfG
Tonka