Cursor Property

FrameworkContentElement.Cursor Property


Gets or sets the cursor that displays when the mouse pointer is over this element.

Namespace:   System.Windows
Assembly:  PresentationFramework (in PresentationFramework.dll)

public Cursor Cursor { get; set; }

Property Value

Type: System.Windows.Input.Cursor

The cursor to display. The default value is defined as null per this dependency property. However, the practical default at run time will come from a variety of factors.

When setting this property in XAML, the XAML processor relies on type conversion for the Cursor class to evaluate the string. The provided string should evaluate to a CursorType value. See Cursor for details.

Whether the cursor as established by this property will or will not display when the mouse pointer is over this element is also dependent on the value of the ForceCursor property. Also, event-related considerations such as an active drag, mouse capture, text editing modes within controls, and so on, will also affect the cursor with higher priority than the value you specify in this property.

To revert the behavior of setting this property to the eventual default, set it to null again.

The null default really means that determination of the practical cursor value is deferred here and should be obtained from elsewhere. If presented with no programmatic values from any source, the default cursor over a Windows Presentation Foundation (WPF) application will be an arrow.

Each movement of the mouse over a WPF application raises a QueryCursor event. The event bubbles, and any element along the route has the opportunity to handle the event and to set the value of the cursor via the arguments of this event. If that happens, the fact that the event is handled and has a changed value in the arguments takes precedence over the value of the Cursor property at any level, unless ForceCursor is set.

If not creating a custom cursor, typically you set this property to a static property value of the Cursors class.

Setting the Cursor to a custom value is not enabled in partial trust. For more information on custom cursors, see Input Overview.

Identifier field


Metadata properties set to true


The following example sets the cursor to a custom value.

private void CursorTypeChanged(object sender, SelectionChangedEventArgs e)
    ComboBox source = e.Source as ComboBox;

    if (source != null)
        ComboBoxItem selectedCursor = source.SelectedItem as ComboBoxItem;

        // Changing the cursor of the Border control 
        // by setting the Cursor property
        switch (selectedCursor.Content.ToString())
            case "AppStarting":
                DisplayArea.Cursor = Cursors.AppStarting;
            case "ArrowCD":                        
                DisplayArea.Cursor = Cursors.ArrowCD;
            case "Arrow":
                DisplayArea.Cursor = Cursors.Arrow;
            case "Cross":
                DisplayArea.Cursor = Cursors.Cross;
            case "HandCursor":
                DisplayArea.Cursor = Cursors.Hand;
            case "Help":
                DisplayArea.Cursor = Cursors.Help;
            case "IBeam":
                DisplayArea.Cursor = Cursors.IBeam;
            case "No":
                DisplayArea.Cursor = Cursors.No;
            case "None":
                DisplayArea.Cursor = Cursors.None;
            case "Pen":
                DisplayArea.Cursor = Cursors.Pen;
            case "ScrollSE":
                DisplayArea.Cursor = Cursors.ScrollSE;
            case "ScrollWE":
                DisplayArea.Cursor = Cursors.ScrollWE;
            case "SizeAll":
                DisplayArea.Cursor = Cursors.SizeAll;
            case "SizeNESW":
                DisplayArea.Cursor = Cursors.SizeNESW;
            case "SizeNS":
                DisplayArea.Cursor = Cursors.SizeNS;
            case "SizeNWSE":
                DisplayArea.Cursor = Cursors.SizeNWSE;
            case "SizeWE":
                DisplayArea.Cursor = Cursors.SizeWE;
            case "UpArrow":
                DisplayArea.Cursor = Cursors.UpArrow;
            case "WaitCursor":
                DisplayArea.Cursor = Cursors.Wait;
            case "Custom":
                DisplayArea.Cursor = CustomCursor;

        // If the cursor scope is set to the entire application
        // Use OverrideCursor to force the cursor for all elements
        if (cursorScopeElementOnly == false)
            Mouse.OverrideCursor = DisplayArea.Cursor;

.NET Framework
Available since 3.0
Return to top
© 2015 Microsoft