• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# - WPF - Rysowanie linii

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,831 wizyt
pytanie zadane 8 lipca 2016 w C# przez pablocity Początkujący (330 p.)

Witam

Mam prosty (mam nadzieję) aczkolwiek niezwykle denerwujący problem, mianowicie piszę aplikację w WPF (C#), dopiero zaczynam bawić się tą technologią i widzę że w stosunku do WinFormsów jest spooro zmian, również w tzw. rysowaniu.

Całokształt projektu jest w tym momencie mało ważny, chodzi "jedynie" o narysowanie prostej linii z punktu do punktu, pierwotnie próbowałem robić to w docelowej metodzie tam gdzie to rysowanie było potrzebne, ale po kilku godzinach spędzonych nad niedziałającą kreską, naprawdę można się zdenerwować, więc wsadziłem to do InitializeComponent, gdzie jak myślałem nie może się nie udać - byłem naiwny...

Oto kod rysowania samej linii, dodam że z elementem canvas jest wszystko raczej w porządku, ponieważ działa rysowanie elipsy po kliknięciu, a wszystko to w tym samym elemencie. Dodatkowo napisałem to dla próby w XAML'u (linię) w tym samym canvas i wszystko działało, niestety nie mogę tego tak zostawić bo muszę te linie generować dynamicznie w czasie działania programu.

Line someLine = new Line()
            {
                X1 = 50,
                Y1 = 50,
                X2 = 190,
                Y2 = 100,
                Width = 3,
                Stroke = Brushes.Black,
                StrokeThickness = 2.5
            };
            
            
            dataCanvas.Children.Add(someLine);

 

Z góry dziękuję za pomoc

Pozdrawiam

Paweł

1 odpowiedź

+1 głos
odpowiedź 8 lipca 2016 przez obl Maniak (51,300 p.)
wybrane 8 lipca 2016 przez pablocity
 
Najlepsza

No tak, rysujesz sobie linię, i ustawiasz jej długość na 3 w tym miejscu:

Width = 3,

I się dziwisz, że ci nie rysuje. Rysuje, tylko nie od punktu X1, Y1 do X2, Y2 a rysuje linię zaczynającą się w pierwszym punkcie w kierunku drugiego o długości 3 px. Ja wywaliłem Width = 3 i narysowało od punktu do punktu.

komentarz 8 lipca 2016 przez pablocity Początkujący (330 p.)

Dziękuję bardzo, zmyliło mnie to że width to de facto szerokość, a przynajmniej w taki sposób działało to na elipsie. Mam jeszcze jedno pytanie jeśli już przy liniach jesteśmy, nie znasz może sposobu na to by linia rysowała się pod danym elementem (w tym wypadku elipsą)? Na razie wygląda to tak, ale chciałbym jakoś zamienić warstwy czy coś w ten deseń ale nie wiem czy jest to możliwe.

komentarz 8 lipca 2016 przez obl Maniak (51,300 p.)

Szczerze w tej dziedzinie nie jestem jakimś wielkim specjalistą ale podejrzewam, że sytuacja ma się tak: obiekty rysowane są przechowywane w jakimś tam kontenerze. A kolejność ich dodawania determinuje to, który obiekt jest pod którym. Innymi słowy najlepiej jest rysować obiekty w kolejności od tych, które mają być pod spodem do tych, które mają być na wierzchu. Jeżeli chcesz dodać jakiś element na sam początek albo gdzieś w środku to jest metoda dla obiektu typu Canvas umożliwiająca takie dodawania elementów, a jest to np. canvas1.Children.Insert( tutaj_podajesz_index, tutaj_obiekt_dodawany).

Jeszcze jedna drobna uwaga, broń boże żebyś przerysowywał to ustrojstwo w ten sposób, że wszystkie te elementy jeszcze raz dodajesz do tablicy. Bo zrobi ci się sjesta manana. Dlaczego? Bo będziesz miał za każdym odświeżeniem okna dodawane elementy, a ich liczba będzie rosła i rosła aż w końcu dojdzie do sytuacji, gdzie twój komputer nie będzie w stanie odświeżyć w rzeczywistym czasie takiej liczby elementów i zacznie się przymulanie. Jak musisz coś zmienić to albo jakoś musisz się odwołać do danego elementu w Canvasie, albo usunąć wszystko i dodać od nowa.

komentarz 8 lipca 2016 przez pablocity Początkujący (330 p.)
Ok popróbuję coś, w każdym razie dziękuję za pomoc.

EDIT: Insert działa idealnie :)

Podobne pytania

0 głosów
1 odpowiedź 819 wizyt
pytanie zadane 1 września 2016 w C# przez niezalogowany
0 głosów
0 odpowiedzi 431 wizyt
pytanie zadane 29 sierpnia 2016 w C# przez niezalogowany
0 głosów
1 odpowiedź 658 wizyt
pytanie zadane 4 czerwca 2016 w C# przez winiardesign Gaduła (3,930 p.)

93,432 zapytań

142,428 odpowiedzi

322,661 komentarzy

62,796 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...