Kreslení ve WPF – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kreslení ve WPF – .NET – Fórum – Programujte.comKreslení ve WPF – .NET – Fórum – Programujte.com

 

Mux
~ Anonymní uživatel
5 příspěvků
10. 12. 2012   #1
-
0
-

Ahoj,

chtěl jsem si zkusit WPF a něco nakreslit na okno. zatím jsem kreslil jen v C# přes paint, ale WPF to vykresluje přes directX, tak jsem to chtěl zkusit a zjistil jsem, že to nejde jak jsem mysliel

vytvořil jsem čistej projekt WPF app a v hlavním oknu přepsal render 

protected override void OnRender(DrawingContext dc)
{
    base.OnRender(dc);
    dc.DrawEllipse(Brushes.Black, new Pen(), new Point(50, 50), 50, 50);
}

ale nic se mi nezobrazí... okno mám stále bílé :( jak to mám prosím udělat? Díky

Nahlásit jako SPAM
IP: 213.168.183.–
Vaizo0
Stálý člen
10. 12. 2012   #2
-
0
-
Nahlásit jako SPAM
IP: 85.93.127.–
Evzen+2
Návštěvník
10. 12. 2012   #3
-
0
-

Ahoj,

nevím, jestli přímo explicitně nepotřebuješ vykreslovat přes DrawingContext, ale jestli ne, tak bych se tomu vyhnul a jak píše Vaizo, použil bych Canvas.

Canvas je jen jeden z mnoha layoutů. Umožňuje ti fixní pozicování elementů na Left, Top ( a případně Z) souřadnice. Pro vykreslování pak použiješ další prvky jako je Rectangle, Patch, Elipse. 

Mrkni třeba sem, pro inspiraci.

Možná tě bude i zajímat kontrolka InkCanvas, která umí rovnou kreslit.

Evžen

Nahlásit jako SPAM
IP: 193.179.183.–
Mux
~ Anonymní uživatel
5 příspěvků
10. 12. 2012   #4
-
0
-

díky, na tyhle linky jsem koukal, ale jak to můžu udělat bez použití XAML?

Nahlásit jako SPAM
IP: 213.168.183.–
Mux
~ Anonymní uživatel
5 příspěvků
10. 12. 2012   #5
-
0
-

jo pardon, už tam vidim příklad v .net 

            Line line = new Line()
             {
                 Stroke = Brushes.Black,
                 StrokeThickness = 2,
                 X1 = 0,
                 Y1 = 0,
                 X2 = Width,
                 Y2 = Height
             };
            myGrid.Children.Add(line);

tohle je předpokládám přes Canvas... zkousel jsem dat Grid uplne pryc a potom nevim jak dál.. jak se to dělá přes OnRender(), přes DrawingContext?

Nahlásit jako SPAM
IP: 213.168.183.–
Mux
~ Anonymní uživatel
5 příspěvků
10. 12. 2012   #6
-
0
-

aha už asi vim, když jsem zapnul "OverridesDefaultStyle", tak to jde.. je sice problem, ze nemůzu použít zadnou komponentu, takže je to ciste pro kreslení, ale ucel mi to splnilo

můžu se spíš zeptat, jak mám tohle udělat u Page? že by Page vykreslovala přes OnRender a tu page bych si umístil na hlavní okno?

já když jsem to zkoušel, tak se mi OnRender v Page vůbec nevolal a Page jsem do okna přidal jako AddVisualChild(page)

Nahlásit jako SPAM
IP: 213.168.183.–
Evzen+2
Návštěvník
10. 12. 2012   #7
-
0
-

Ahoj,

nevím, proč se tak vyhýbáš tomu XAMLu, ale to je tvoje věc :)

Grid, Dock, Stack a Canvas jsou komponenty pro layout. 

To znamená, že ti pomůžou s rozvržení GUI. 

Můžeš je mezi sebou libovolně kombinovat, takže klidně můžeš udělat, to, že použiješ Grid, rozvrhneš si GUI, přidáš tlačítka, comboBoxy, textBoxy a do centrální části dáš Canvas a do toho budeš vykreslovat třeba dynamicky v závislosti na stisku tlačítek, volbě comboBoxu.

Na canvas můžeš kreslit klidně v událostech, tj po stisku tlačítka a nebo pokud to chceš hned po načtení okna, tak použit třeba onLoaded, nebo tak nějak by se ta událost měla jmenovat.

Nedoporučuji ti to renderovat v konstruktoru, protože pokud ti to tam spadne, tak se ti výjimka obalí XAML bastlem a bude se tvářit jako by byla chyba na XAMLu.

Jinak jestli použiješ Page nebo Window, popř. UserControlku, tak to už je plně v tvé režii.

Zkus si nejprve přečíst něco málo o WPF, na netu toho najdeš spousty. 

http://wpftutorial.net/

http://xaml.cz

http://www.vyvojar.cz/…e-s-wpf.aspx

Evžen

Nahlásit jako SPAM
IP: 109.80.214.–
Mux
~ Anonymní uživatel
5 příspěvků
10. 12. 2012   #8
-
0
-

já bych právě chtěl udělat nějakou hru a chtěl bych použít WPF kvůli rendrování přes directx.. když jsem to dělal přes normální winform, tak byl problém s cpu když jsem měl hru ve větším rozlišení  a xaml neberu jako jazyk, je to humus :)

Nahlásit jako SPAM
IP: 213.168.183.–
Evzen+2
Návštěvník
10. 12. 2012   #9
-
0
-

#8 Mux
Tak to si spatně pochopil WPF..

WPF NENÍ dělaný na renderování nějakých složitostí např. her. Jestli potřebuješ výkon, tak doporučuji použít třeba XNA, který je dostatečně jednoduchý na používání a poskytuje dostatečný výkon. 

Directx si přiznám, že nevím jak propojit s .net frameworkem, ale existují wrappery na OpenGL a ty ti ten výkon taky poskytnou.

XAML je skvělá věc a jestli s tím máš problém, tak to budeš mít těžký, protože Microsoft na tom teď staví jak app pro Win8, pro aplikace na desktop, tak na mobil.

Evžen

Nahlásit jako SPAM
IP: 109.80.214.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Podobná vlákna

Kreslení v C++ — založil Sunmay

Kreslení — založil Novacek

Průhledné kreslení — založil Bub

QT a plynulost kreslení — založil Seph

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý