При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. |
Модификация клиентского Silverlight приложения
Изменение визуального поведения элемента Button
В разрабатываемом приложении для визуального представления и поведения всех кнопок – элементов управления Button целесообразно изменить рамки кнопок, сделав их более четкими в состоянии доступности, а также изменить рамки в состоянии, когда на кнопку наведен указатель мыши.
Стиль ButtonStyle создается для типа Button (TargetType="Button") и в нем определяются шесть свойств: Background, Foreground, Padding, BorderThickness, BorderBrush и Template. Для свойств Background, Foreground, Padding и BorderThickness задаются конкретные значения, а для свойства BorderBrush определяется кисть градиентной заливки. Полный код XAML-разметки стиля ButtonStyle приведен в приложении.
Вложенное свойство ControlTemplate определено для типа Button (TargetType="Button"). Оно содержит контейнер Grid, для которого задается свойства Cursor (Cursor="Hand"). Свойство Cursor будет определять изменение вида курсора при наведении указателя мыши на кнопку. Вложенное свойство зависимостей VisualStateManager.VisualStateGroups элемента управления определяет визуальное представление элемента управления в различных состояниях. Рамка ( Border ) с именем Background определяет визуальное представление, которое будет изменяеться в различных состояниях кнопки. Свойство ContentPresenter определяет, что и как будет формироваться на панели кнопки. Три прямоугольника используются для представления внутреннего содержания кнопки в режимах получения фокуса ( FocusVisualElement ), наведения указателя мыши ( MouseOverVisualElement ) и в недоступном состоянии ( DisabledVisualElement ). Полный код XAML-разметки шаблона ControlTemplate для Button приведен в приложении.
Для элемента управления Button имеются следующие состояния, которые приведены в табл.7.2
Имя VisualState | Имя VisualStateGroup | Описание |
---|---|---|
Normal | CommonStates | Состояние по умолчанию. |
MouseOver | CommonStates | Указатель мыши расположен в элементе управления. |
Pressed | CommonStates | Элемент управления нажат. |
Disabled | CommonStates | Элемент управления отключен. |
Focused | FocusStates | Элемент управления имеет фокус. |
Unfocused | FocusStates | Элемент управления не имеет фокуса. |
Для проектируемого стиля необходимо задать визуальное представление для состояний CommonStates и FocusStates.
Для группы состояний CommonStates в состоянии Normal применяется визуальное представление по умолчанию, а для состояний MouseOver, Pressed и Disabled задается как цветовая ( ColorAnimation ), так числовая ( DoubleAnimation ) анимация свойств кнопки.
Для группы состояний FocusStates в состоянии Unfocused применяется визуальное представление по умолчанию, а для состояния Focused задается как цветовая анимация свойств кнопки – изменяется прозрачность.
Полный код XAML-разметки стиля ButtonStyle приведен в приложении.
Стиль для интерфейсного элемента Buttun добавим в словарь ресурсов StylesAndTemplates.xaml. далее необходимо модифицировать XAML-разметку для элементов Buttun главного окна приложения. Задание стиля производится аналогично для всех кнопок главного окна приложения. Так для кнопки "Создать" ( ButtonNew ) XAML-разметка будет иметь следующий вид:
<Button Name="ButtonNew" Content="Создать" Margin="5" Padding="10,5,10,5" Height="25" Click="New_Click" ToolTipService.ToolTip="Создать новую запись" IsEnabled="False" Style="{StaticResource ButtonStyle}" />
Визуальное представление кнопки на основе спроектированного стиля ButtonStyle представлено на рис. 8.5.
После компиляции и запуска страница приложения имеет вид, приведенный на рис. 8.6.
Ключевые термины
Конвертор данных, шаблон данных, стиль, объектный ресурс, пользовательский интерфейс, элемент пользовательского интерфейса, словарь ресурсов, визуальное состояние класса,
IValueConverter, Convert, ConvertBack, DataTemplate, OpenFileDialog, stream, ControlTemplate, User Experience, UX, ResourceDictionary, MergedDictionaries , ContentPresenter, VisualStateManager, VisualState
Краткие итоги
Рассмотрены подходы по включению в элементы управления Silverlight- приложения графических объектов, построение сложных стилей и шаблонов для списков и кнопок с целью повышения качества интерфейса пользователя.
Ресурсы для углубленного изучения
- Silverlight // http://msdn.microsoft.com/ru-ru/library/cc838158(v=VS.95).aspx.
- [ 2 ] , стр. 193 – 272.
- [ 3 ] , стр. 385 – 440.
- [ 5 ] , стр. 134 – 139.
- [ 9 ] , стр. 1137 – 1212.
Вопросы для самопроверки
- В каком формате можно хранить изображения с SQL Server 2008?
- Какие требования предъявляются к классу конвертора данных?
- Поясните, как можно использовать конвертор данных в XAML-разметке элемента управления.
- Поясните, что означает визуальная структура и поведение элемента управления.
- Для чего использутся словарь ресурсов?
- Поясните назначение свойства MergedDictionaries.
- Что определяет визуальное состояние элемента контроля?
- Поясните назначение класса VisualState.
- Поясните назначение класса VisualStateManager.
- Поясните назначение свойства VisualStateGroups.
- Поясните назначение коллекции Storyboard.