Pregunta

¿Hay una manera de ocultar o mover cursor del PasswordBox?

¿Fue útil?

Solución

En .NET 3.5 SP1 o anterior, no hay manera limpia para especificar el color de un cuadro de texto WPF / PasswordBox símbolo de intercalación.

Sin embargo, hay una forma de especificar (o en este caso remove) que intercalación de la vista (a través de un corte). El color es el color de intercalación inversa del cuadro de texto color de fondo / de PasswordBox. Por lo tanto, puede hacer que el color de fondo "negro transparente", que engañar al sistema en el uso de un símbolo de intercalación blanco (que no es visible).

El código es (simplemente) como sigue:

<PasswordBox Background="#00000000" />

Para más información sobre este tema, por favor, echa un vistazo a los siguientes enlaces:

Tenga en cuenta que en .NET 4.0, el símbolo de intercalación será personalizable.

Espero que esto ayude!

Otros consejos

Puede intentar algo como esto para fijar la selección en el PasswordBox:

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

Después de eso, lo llaman como esto para ajustar la posición del cursor:

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

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

Para obtener la selección de PasswordBox i utilizar este código:

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

Probado a .NET 4.0, la esperanza de que funcione para usted también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top