Diskuze: Vyvolání element over
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 16 zpráv z 16.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


když v kódu posunuješ ty rectangly musíš to ověřit tam, eventy odchytávají uživatelovy akce, ne že nějaký element udělal cosi dalšímu elementu. To si musíš zpracovat sám.
děkuji za odpověd, event přece odchytává i jiné věci, nevím změny,
složek, změny v nějáké kolekci atd..já právě to nechci ověřovat tak,
že budu porovnávat souřadnice. Když ví program, že kurzor myši se rovná
souřadnicích elementu, tak proč by neuměl, že jeden elemement se rovná
druhému, ale je pravda, že jsem nic moc na netu nenašel 
však event ti odchytí, všechno co si naprogramuješ, při návrhu WPF toto nikdo nepotřeboval, tak to nikdo v Microsoftu neprogramoval. Ale nikdo ti nebrání.
Podle mě by při každém pohybu toho čtverečku měla být zkontrolována pozice i toho druhého čtverečku a podle toho bys měl vyvolávat události...
jasně, že tam můžu zkoušet, jeslti se pozice x a zároven y nenachází v jiném objektu, jenže mě to příjde takové divné, když by to ten program měl umět sám, doufal jsem, že jste se s tím někdo setkal a budete umět zachytit pohyb elementů přes sebe...
ale to je přece, proč to píšu na forum, brání mi to, že to neumím a
nemůže se dočíst a ani nevím čeho se chytit, jinak bych Tě přece
neotravoval a udělal si to 
...když by to ten program měl umět sám...
Program umí to, co mu přikáže (naprogramuje) programátor. Nikdy jsem
podobného nic nedělal, ale myslím si, že jinak, než souřadnicemi objektů
se to zjišťovat nedá... Jakým způsobem hýbeš s těmi objekty? Taky v
podstatě přes "souřadnice", ne?
public event EventHandler OnCanvasPositionChange;
public MainWindow()
{
InitializeComponent();
Rectangle r = new Rectangle(){ Width=200, Height=200, Fill=Brushes.Red};
canvas.Children.Add(r);
OnCanvasPositionChange += MainWindow_OnCanvasPositionChange;
DependencyPropertyDescriptor
.FromProperty(Canvas.LeftProperty, typeof(Rectangle))
.AddValueChanged(r, OnCanvasPositionChange);
DependencyPropertyDescriptor
.FromProperty(Canvas.RightProperty, typeof(Rectangle))
.AddValueChanged(r, OnCanvasPositionChange);
Canvas.SetLeft(r, 10);
}
void MainWindow_OnCanvasPositionChange(object sender, EventArgs e)
{
Debug.WriteLine("Rectangle has changed his position!");
}
Kdyžtak si najdi, co jsou to Attached Properties 
děkuji za odpověd, todle trochu znám, přiřazuješ event na změnu vlastnosti toho objektu, ale vůbec mi to neřeší to, že já potřebuji vyvolat event při kolizi těch dvou objektů...další možnost co má to udělat v xanu, ale to už se mi zdá zbytečné. Jenom mě překvapuje, že nejde dát prostě tomu elementu stejné vlastnoti, jako má například kurzor myši (i když vím, že takhle napsané je to blbost), ale ten taky neprogramujeme a prostě když máš nad elementem mouseover, project pustíš a najedeš myší nad element tak se vyhodí ten event
Zdá se mi, že mícháš věci spolu nesouvisející dohromady. Psal jsem, že program dělá to, co mu "nařídí" programátor. Kursor se chová tak, jak mu "nařídili" autoři operačního systému, takže ano, my kursor neprogramujeme, ale ten kdo vytvořil operační systém, kterého je součástí i funkce kursoru nastavil nějaké chování myši. Je to všechno o tom, co do toho programu naimplementuješ ty jako autor (programátor).
Nechci se hádat, ale myslím, že nic nemíchám. Děláme ve vývojovém studiu, kde je už spousty věcí připravených a my je spojujeme. Jedna z těch věcí je i myš a moje otázka zněla, jestli někdo neumíte to, aby si do elementu v canvasu přidala funkce, že když najede na jinej element v canvasu tak vznikne udalost, podobně tak, jako když najede myš...
Chápu, čeho bys chtěl docílit, jen jsem psal, že myš ty funkce nemá sama od sebe, ale určil jí je programátor...
public partial class MainWindow : Window
{
public event EventHandler OnCanvasPositionChange;
public event Action OnRectangleColision;
Rectangle r1, r2;
public MainWindow()
{
InitializeComponent();
r1 = new Rectangle() { Width = 50, Height = 50, Fill = Brushes.Red };
r2 = new Rectangle() { Width = 50, Height = 50, Fill = Brushes.Black };
canvas.Children.Add(r1);
canvas.Children.Add(r2);
OnCanvasPositionChange += MainWindow_OnCanvasPositionChange;
DependencyPropertyDescriptor
.FromProperty(Canvas.LeftProperty, typeof(Rectangle))
.AddValueChanged(r1, OnCanvasPositionChange);
DependencyPropertyDescriptor
.FromProperty(Canvas.TopProperty, typeof(Rectangle))
.AddValueChanged(r1, OnCanvasPositionChange);
Canvas.SetTop(r1, 0);
Canvas.SetLeft(r1, 0);
Canvas.SetTop(r2, 100);
Canvas.SetLeft(r2, 100);
}
void MainWindow_OnCanvasPositionChange(object sender, EventArgs e)
{
var rect1 = new Rect(Canvas.GetLeft(r1), Canvas.GetTop(r1), r1.Width, r1.Height);
var rect2 = new Rect(Canvas.GetLeft(r2), Canvas.GetTop(r2), r2.Width, r2.Height);
if (rect1.IntersectsWith(rect2))
OnRectangleColision();
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Left)
Canvas.SetLeft(r1, Canvas.GetLeft(r1) - 10);
else if (e.Key == Key.Right)
Canvas.SetLeft(r1, Canvas.GetLeft(r1) + 10);
else if (e.Key == Key.Down)
Canvas.SetTop(r1, Canvas.GetTop(r1) + 10);
else if (e.Key == Key.Up)
Canvas.SetTop(r1, Canvas.GetTop(r1) - 10);
}
}
Všechno mám za tebe psát já?
ne doufám, že nemusíš, ale fakt jsem nevěděl, ani třeba o IntersectsWith(), děkuji moc si mi pomohl
Zobrazeno 16 zpráv z 16.