Frage

Gibt es eine Möglichkeit sich zu verstecken oder die PasswordBox des caret zu bewegen?

War es hilfreich?

Lösung

In .NET 3.5 SP1 oder vorherigen, gibt es keine saubere Art und Weise die Farbe eines WPF TextBox angeben / PasswordBox caret.

Es gibt jedoch eine Möglichkeit (oder in diesem Fall entfernen), dass caret aus Sicht angeben (über einen Hack). Die caret Farbe ist die inverse Farbe der TextBox / PasswordBox Hintergrundfarbe. So können Sie die Hintergrundfarbe „transparent black“ machen, die das System in dem mit einem weißen caret werden täuschen (die nicht sichtbar ist).

Der Code ist (einfach) wie folgt:

<PasswordBox Background="#00000000" />

Für weitere Informationen zu diesem Thema finden Sie unter den folgenden Links finden Sie unter:

Man beachte, dass in .NET 4.0 die Caret anpassbar sein wird.

Hope, das hilft!

Andere Tipps

Sie können so etwas wie diese versuchen, die Auswahl der PasswordBox zu setzen:

private void SetSelection(PasswordBox passwordBox, int start, int length)
{ 
    passwordBox.GetType()
               .GetMethod("Select", BindingFlags.Instance | BindingFlags.NonPublic)
               .Invoke(passwordBox, new object[] { start, length }); 
} 

Danach rufen Sie es wie folgt die Cursor-Position zu setzen:

// set the cursor position to 2... or lenght of the password
SetSelection( passwordBox1, 2, 0); 

// focus the control to update the selection 
passwordBox1.Focus(); 

, um die Auswahl von PasswordBox Get ich verwende diesen Code:

private Selection GetSelection(PasswordBox pb)
{
    Selection result = new Selection();
    PropertyInfo infos = pb.GetType().GetProperty("Selection", BindingFlags.NonPublic | BindingFlags.Instance);

    object selection = infos.GetValue(pb, null);

    IEnumerable _textSegments = (IEnumerable)selection.GetType().BaseType.GetField("_textSegments", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(selection);

    object first_textSegments = _textSegments.Cast<object>().FirstOrDefault();

    object start = first_textSegments.GetType().GetProperty("Start", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(first_textSegments, null);
    result.start = (int) start.GetType().GetProperty("Offset", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(start, null);

    object end = first_textSegments.GetType().GetProperty("End", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(first_textSegments, null);
    result.length = (int)start.GetType().GetProperty("Offset", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(end, null) - result.start;

    return result;
}

struct Selection
{
    public int start;
    public int length;
}   

Getestet bei .net 4.0, Hoffnung, die auch für Sie arbeitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top