Laden...

MouseCursor wechseln bei GotFocus()

Erstellt von Philb vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.473 Views
P
Philb Themenstarter:in
44 Beiträge seit 2009
vor 13 Jahren
MouseCursor wechseln bei GotFocus()

Hallo zusammen

Ich möchte das bei einem TextBlock Control, wenn ich mit dem Cursor drüber fahre automatisch der MouseCursor wechselt (auf Cursors.IBeam). Beim "Verlassen" des TextBlocks soll der MouseCursor wieder zurück wechseln (auf Cursors.Arrow).

Irgendwie kriege ich das nicht hin, es wechselt zwar beim "drüberfahren" aber beim "verlassen" des Feldes wird der Event nicht ausgelöst. Welchen Event soll ich da verwenden ? LostFocus() scheint nicht der richtige zu sein ? Geht das allenfalls viel einfacher ?

Danke für eure Tipps

private void txtTest_MouseMove(object sender, MouseEventArgs e)
        {
            Mouse.OverrideCursor = Cursors.IBeam;
        }

        private void txtTest_LostFocus(object sender, RoutedEventArgs e)
        {
            Mouse.OverrideCursor = Cursors.Arrow;
        }
3.430 Beiträge seit 2007
vor 13 Jahren

Hallo Philb,

du musst das setzen / rücksetzen vom Cursor nicht selbst managen.
Einfacher ist es wenn du deinem TextBlock (oder dem Container der den TextBlock enthält) den Cursor setzst.

Dann bleibt der Rest der Anwendung ganz normal und sobald der Mauszeiger sich über diesem Element befindet wird dieser in IBeam umgestellt.

Guck mal hier: How to: Change the Cursor Type

Gruss
Michael

P
Philb Themenstarter:in
44 Beiträge seit 2009
vor 13 Jahren

Danke für die Info. Du meinst so

<TextBox Cursor="IBeam" .... >

Das geht leider auch nicht. Wenn ich drüber fahre oder reinklicke, wechselt der Cursor nicht.

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo Philb,

der Standard-Cursor von der TextBox ist schon IBeam deshalb merkst du keinen Unterschied wenn du ihn selbst nochmals auf IBeam setzst.

Probiere mal das hier dann wirst du sehe dass es funktioniert


<Window ....>
	<Grid>
		<Grid.ColumnDefinitions>
			<ColumnDefinition Width="*" />
			<ColumnDefinition Width="*" />			
		</Grid.ColumnDefinitions>
		<TextBox Grid.Column="0" Cursor="Help" Background="Red"/>
		<Border Grid.Column="1" Cursor="Hand" Background="Blue"/>
	</Grid>
</Window>

Gruss
Michael

P
Philb Themenstarter:in
44 Beiträge seit 2009
vor 13 Jahren

Das tut auch nicht. Der Cursor bleibt unverändert.

Hat es allenfalls mit einem Style zu tun ? Ich verwende bei allen UI Forms ein Style Theme als ResourceDictionary. Dort habe ich aber nicht explizit ein Cursor Property zu den jeweiligen Controls gesetzt.

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo Philb,

Das gibt es doch nicht..
Erstelle mal ein neues Projekt und kopiere den Code so rein wie er ist.

Ich habe das jetzt getestet und das funktioniert bei mir jedenfalls ohne Probleme.

Sobald ich über die TextBox fahre kommt das Help symbol und über dem Border kommt die Hand.

Du redest schon auch vom Maus-zeiger? Oder gibt es da ein Missverständnis?

Hat es allenfalls mit einem Style zu tun ?

Keine Ahnung was du für einen Style hast, aber das glaube ich eher nicht.
Entferne doch mal einfach testweise den Style dann wirst du schon sehen woran es liegt.

Gruss
Michael

P
Philb Themenstarter:in
44 Beiträge seit 2009
vor 13 Jahren

Erstelle mal ein neues Projekt und kopiere den Code so rein wie er ist.

Ich habe das jetzt getestet und das funktioniert bei mir jedenfalls ohne Probleme.

ok, wenn ich ein komplett neues Window erstelle und deinen Code verwende, dann tut's. Aber auf meinem Form mit diversen anderen UserControls drauf funktioniert's nicht. Was könnte da noch "reinfunken" ?

Hinweis von michlG vor 13 Jahren

Bitte keine Full-Quotes: [Hinweis] Wie poste ich richtig? 2.3

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

es ist so sehr schwierig zu sagen woran das liegt.
Hast du dein ganzes GotFocus / LostFocus Gebastle aus deiner Codebehind entfernt, denn vielleicht macht das dabei die Probleme.

Ansonsten musst du einfach versuchen Teile vom Programm auszukommentieren um das Problem genauer lokalisieren zu können.
Evtl. die Styles entfernen und dann nochmals testen.

Mehr kann ich dir da ohne weitere Details nicht sagen.

Gruss
Michael

P
Philb Themenstarter:in
44 Beiträge seit 2009
vor 13 Jahren

Leider ging's nicht, ich hab's jetzt so gelöst


private void Control_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (sender is xyz)
            {
                Mouse.OverrideCursor = Cursors.AppStarting;
            }
        }

private void Control_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (sender is xyz)
            {
                Mouse.OverrideCursor = Cursors.Arrow;
            }
        }

so funktioniert's 😃