Domanda

C'è un modo per nascondere o spostare punto di inserimento del PasswordBox?

È stato utile?

Soluzione

In .NET 3.5 SP1 o precedente, non c'è modo pulito per specificare il colore di una TextBox WPF / PasswordBox accento circonflesso.

Tuttavia, c'è un modo per specificare (o in questo caso la rimozione) che accento circonflesso alla vista (tramite un hack). Il colore accento circonflesso è il colore inverso del colore di sfondo TextBox / di PasswordBox. Così, è possibile rendere il colore di sfondo "nero trasparente", che ingannare il sistema ad utilizzare un accento circonflesso bianco (che non è visibile).

Il codice è (semplicemente) come segue:

<PasswordBox Background="#00000000" />

Per ulteriori informazioni su questo argomento, si prega di consultare i seguenti link:

Si noti che in .NET 4.0 il cursore sarà personalizzabile.

Spero che questo aiuti!

Altri suggerimenti

Si può provare qualcosa di simile per impostare la selezione nel PasswordBox:

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

Dopo che, chiamare in questo modo per impostare la posizione del cursore:

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

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

Per ottenere la selezione di PasswordBox io uso questo codice:

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;
}   

Testato in .net 4.0, la speranza che funziona anche per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top