Share via


SilverLight 3: Что нового? (часть 2)

На прошлой неделе со мной произошло большое несчастье. Приехав в Киев в субботу ночью, я обнаружил, что забыл блок питания от лаптопа в Днепропетровске. Как назло в офисе чистили ковры и никого не пускали. Поэтому на воскресенье я остался без лаптопа. В результате этого несчастья я обнаужил, что в Киеве тоже есть супермаркеты, а у меня в квартире несколько кастрюль и плита. Закончил я готовить ровно тогда, когда еда перестала помещаться в холодильник. Теперь можно есть месяц. Вот как раз сейчас я доел очередной кусок курицы, закусил бутербродом с салом и могу приступить ко второй части своей статьи. Поскольку я все еще еду в Минск, то очень трясет, поэтому без ошибок не обойтись.

SaveFileDialog

В предыдущих версиях SilverLight Вы могли общаться с файловой системой только через OpenFileDialog. Это вызывало много нареканий от разработчиков, так как при отображении текстовой информации пользователь не имел возможности сохранить ее на локальный диск. Это же касалось различных графических редакторов и т. д. Теперь разработчик имеет возможность записать на диск любую информацию и в любое место, используя возможности SaveFileDialog. Смотрим пример:

SaveFileDialog file= new SaveFileDialog();
file.Filter = "Text File | *.txt";
file.DefaultExt = ".txt";
file.ShowDialog();

if (file.File.Name != "")
{
     System.IO.StreamWriter s =
         new System.IO.StreamWriter(file.OpenFile());
     s.Write("Hello");
     s.Close();
}

Этот код можно разместить в любом методе интерфейсного потока. В результате работы кода, пользователю будет предложено выбрать папку для записи и имя файла (по умолчанию .txt). В файл будет записано Hello. Ничего сложного.

Поддержка ToolTip

Следующий интересный элемент управления, это ToolTip. Он может быть привязан к любому UIElement и содержать практически любой контент для отображения. Привязку к элементу можно выполнять, как указав свойство PlacementTarget, так и использовав этот элемент в качестве части контента. Ниже показан код, который позволяет отобразить ToolTip для кнопки. В качестве контента тут используется видео-файл:

<Button Content="Detach" Width="100" Click="Button_Click">
  <ToolTipService.ToolTip>
    <ToolTip Placement="Right">
       <ToolTip.Content>
         <MediaElement Source="4.wmv"></MediaElement>
       </ToolTip.Content>
    </ToolTip>
  </ToolTipService.ToolTip>
</Button>

ToolTip может быть привязан к одной из границ элемента или к координатам курсора мыши. Привязка задается с помощью свойства Placement.

CaretBrush

Еще одной небольшой особенностью SilverLight 3 является возможность установки каретки для текстового поля и поля для задания пароля (TextBox PasswordBox). Дело в том, что элементы в SilverLight реализуются таким образом, что представление отделено от логики. Поэтому разработчик может всегда заменить внешний вид уже существующего элемента. Например, можно создать треугольную кнопку или овальное поле для ввода данных. Но в элементах TextBox и PasswordBox одна часть не поддавалась изменениям - каретка. Она была исключительно черной. Даже, если разработчик просто меня цвет поля ввода, каретку не всегда было видно. Теперь ситуация изменилась. Теперь каретка может использовать любую из доступных кистей для заливки. Разработчик может просто поменять цвет, а может и установить видеоролик в качестве каретки. Вот пример использования свойства:

<TextBox Text="Text" CaretBrush="Blue"></TextBox>
<TextBox Text="Text" >
    <TextBox.CaretBrush>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            <GradientStop Color="Yellow" Offset="0.0" />
            <GradientStop Color="Red" Offset="0.25" />
            <GradientStop Color="Blue" Offset="0.75" />
            <GradientStop Color="LimeGreen" Offset="1.0" />
        </LinearGradientBrush>
    </TextBox.CaretBrush>
    <TextBox.RenderTransform>
        <ScaleTransform ScaleX="3" ScaleY="3"/>
    </TextBox.RenderTransform>
</TextBox>

Множественный выбор в ListBox

Поскольку как-то так получилось, что мы начали вести речь об элементах управления, рассмотрим еще один, уже знакомый элемент - ListBox. Тут появилось свойство SelectionMode. Это свойство может содержать одно из трех значений: Single, Multiple, Extended. При установке свойства Multiple пользователь может выбирать несколько значений, простым кликом, а при выборе Extended также доступны функциональные клавиши и поведение больше похоже на полюбившийся ListBox из Forms или WPF.

<ListBox x:Name="listBox1" SelectionMode="Extended" SelectionChanged="ListBox_SelectionChanged">
    <ListBox.Items>
        <ListBoxItem Content="Item 1"></ListBoxItem>
        <ListBoxItem Content="Item 2"></ListBoxItem>
        <ListBoxItem Content="Item 3"></ListBoxItem>
        <ListBoxItem Content="Item 4"></ListBoxItem>
    </ListBox.Items>
</ListBox>
<TextBlock x:Name="textBox1"></TextBlock>

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    textBox1.Text = String.Format("{0} items selected",listBox1.SelectedItems.Count);
}

На этом я на сегодня закончу, так как очень хочу спать. Завтра напишу что-то еще.