Создание PasswordBox в Silverlight

В Silverlight 2, несмотря на обилие контролов, нет поля ввода пароля. Конечно, людьми уже написаны классы для решения этой проблемы. Их суть заключается в том, что при вводе символов в текстовое поле, текст записывается в переменную, а в текстовом поле отображается звездочка или любой другой символ. При этом существует метод доступа к содержимому переменной. Ничего плохого в этом решении нет, но, оказывается, существует более элегантное.

Нужно всего лишь заменить стандартный шрифт текстбокса на специльный, в котором все символы заменены каким-то одним, например, кружочком или звездочкой. При этом, считывая пароль, мы получаем обычный текст. Делается это через свойство FontFamily, в формате "имя файла со шрифтами#название шрифта":

<TextBox FontFamily="/slpassword.ttf#SLPassword"/>

Посмотрим на пример:

В Silverlight проект нужно добавить файл шрифта slpassword.ttf и назначить ему свойство BuildAction - Content:

 slpass_as_content

XAML-код примера:

<UserControl x:Class="PasswordBox.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="120">
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel Orientation="Vertical">
            <TextBox x:Name="passBox" Height="60" FontSize="40"
                     FontFamily="/slpassword.ttf#SLPassword"/>
            <ToggleButton Height="60"
                          Unchecked="ToggleButton_Unchecked"
                          Checked="ToggleButton_Checked"
                          Content="Показать/скрыть пароль" />
        </StackPanel>
    </Grid>
</UserControl>

Содержимое Page.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;

namespace PasswordBox
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }
       
        private void ToggleButton_Unchecked(object sender, RoutedEventArgs e)
        {
            passBox.FontFamily = new FontFamily("/slpassword.ttf#SLPassword");
        }

        private void ToggleButton_Checked(object sender, RoutedEventArgs e)
        {
            passBox.FontFamily = new FontFamily("Trebuchet MS");
        }
    }
}

Как видите, не пришлось писать никаких классов и создавать новый контрол, как говорится, все гениальное просто :)

Русифицированный файл со шрифтом - slpassword.ttf

Posted on 17.08.2008 21:46:24 by admin

Permalink | Комментарии (0) | Post RSSRSS comment feed |

Categories:

Tags: , , ,

Оценок нет

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Похожие записи

Добавить комментарий


(Отображает Gravatar)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Предпросмотр

ноября 21. 2008 04:54