В Silverlight 2, несмотря на обилие контролов, нет поля ввода пароля. Конечно, людьми уже написаны классы для решения этой проблемы. Их суть заключается в том, что при вводе символов в текстовое поле, текст записывается в переменную, а в текстовом поле отображается звездочка или любой другой символ. При этом существует метод доступа к содержимому переменной. Ничего плохого в этом решении нет, но, оказывается, существует более элегантное.
Нужно всего лишь заменить стандартный шрифт текстбокса на специльный, в котором все символы заменены каким-то одним, например, кружочком или звездочкой. При этом, считывая пароль, мы получаем обычный текст. Делается это через свойство FontFamily, в формате "имя файла со шрифтами#название шрифта":
<TextBox FontFamily="/slpassword.ttf#SLPassword"/>
Посмотрим на пример:
В Silverlight проект нужно добавить файл шрифта slpassword.ttf и назначить ему свойство BuildAction - 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