DrawingVisual skapa en text ruta som uppkommer när musen är över ett objekt och försvinner därefter.

Permalänk

DrawingVisual skapa en text ruta som uppkommer när musen är över ett objekt och försvinner därefter.

Så jag försöker att manuellt skapa en text ruta som visar musens x och y positioner när den hålls över ett objekt men har kört fast vid att textrutan framkommer men så fort den skapas tas den bort. Koden ska kunna ta bort rutan när musen inte längre är över objektet så jag skapade en MouseEnter och en MouseLeave methoder för att hålla koll på detta och ta bort rutan. Istället så fungerar allt bara att text rutan ständigt tas bort och läggs till och jag vet inte varför. Vad i min logik är fel?

Varför går MouseLeave metoden igång varje gång MouseEnter metoden går av?
Koden är inte klar jag vill bara få feedback till varför det inte fungerar som jag tycker det borde göra.

private Image textImage; private bool inShape; public MovementTestWindow() { InitializeComponent(); inShape = false; textImage = new Image(); DrawText(new Point(100, 100), "Shape"); } private void MouseEntered(object sender, MouseEventArgs e) //Händer när man kommer in. { if (inShape == false) { inShape = true; } myGrid.Children.Add(textImage); UpdateTextBox(); } private void UpdateTextBox() { string txt = "In Shape: " + inShape.ToString(); Status.Text = txt; } private void MouseLeft(object sender, MouseEventArgs e) //Händer när man lämnar. { if(inShape == true) { inShape = false; } myGrid.Children.Remove(textImage); UpdateTextBox(); } private void DrawText(Point point, string shapeName) { var visual = new DrawingVisual(); using (var obj = visual.RenderOpen()) { FormattedText text = new FormattedText(shapeName, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 14, new SolidColorBrush(Colors.Black)); obj.DrawText(text, point); } PixelFormat format = new PixelFormat(); RenderTargetBitmap rtv = new RenderTargetBitmap(600, 600, 96.0, 96.0, format); rtv.Render(visual); textImage = new Image(); textImage.Source = rtv; }

Visa signatur

Så jag kommer ihåg. [code][/code]

Permalänk
Medlem

Det verkar som om du har skapat en metod för att lägga till textrutan när musen kommer in på objektet, och en metod för att ta bort textrutan när musen lämnar objektet. Dock så kör du båda metoderna varje gång musen rör sig över objektet, vilket leder till att textrutan ständigt läggs till och tas bort.

För att lösa detta kan du lägga till en flagga (en boolisk variabel) som håller koll på om musen för närvarande är över objektet. Du kan till exempel kalla flaggan "inShape" som du har i din kod. I MouseEntered metoden kan du sätta inShape till true, och i MouseLeft metoden kan du sätta inShape till false.

Därefter kan du lägga till en if-sats i MouseEntered metoden för att kolla om inShape är false, och bara lägga till textrutan om det är fallet. På samma sätt kan du lägga till en if-sats i MouseLeft metoden för att kolla om inShape är true, och bara ta bort textrutan om det är fallet.

Det bör lösa problemet med att textrutan ständigt läggs till och tas bort.