Программирование >>  Расширенный wf 

1 ... 6 7 8 [ 9 ] 10 11 12 ... 15


InitializeComponent(); NewFile();

private void OnFileNew(object sender, ExecutedRoutedEventArgs e)

NewFile();

private void NewFile()

textContent.Clear();

filename = defaultFilename;

SetTitle();

isChanged = false;

private void SetTitle()

Title = String.Format( {0} {1} , System.IO.Path.GetFileName(filename), appName);

private void OnFileOpen(object sender, ExecutedRoutedEventArgs e)

OpenFileDialog dlg = new OpenFileDialog(); bool? dialogResult = dlg.ShowDialog();

if (dialogResult)

filename = dlg.FileName; SetTitle();

textContent.Text = File.ReadAllText(filename);

catch (IOException ex)

MessageBox.Show(ex.Message, Error WPF Editor , MessageBoxButton.OK, MessageBoxImage.Error);

Обработчик SaveFileCanExecute() возвращает решение о том, должна ли быть доступна команда сохранения файла, в зависимости от того, было ли изменено содержимое:

private void SaveFileCanExecute(object sender, CanExecuteRoutedEventArgs e)

if (isChanged)

e.CanExecute = true;

else

e.CanExecute = false;

Затем приложение откроет файл примера sample.txt, как показано на рис. 35.16.


Рис. 35.16. Открытие файлаsample.txt



Анимация

С помощью анимации вы можете выполнять плавные перемещения, используя движение элементов, изменение цветов, трансформации и тому подобное. WPF существенно облегчает задачу создания анимации. Вы можете анимировать значение и свойство зависимости. Для этого предусмотрены разнообразные классы, позволяющие анимировать значения различных свойств, в зависимости от их типа.

Основные элементы анимации описаны ниже.

□ Временная шкала (Timeline). Временная шкала определяет, как значение изменяется во времени. Доступны различные виды временных шкал для изменения различных типов значений. Базовый класс для всех временных шкал - это Timeline. Чтобы анимировать double, можно использовать класс DoubleAnimation. Класс Int32Animation - класс анимации для целочисленных значений.

□ Раскадровка (Storyboard). Раскадровка используется для комбинирования анимаций. Сам по себе класс Storyboard наследуется от базового класса TimeLineGroup, который, в свою очередь, унаследован от Timeline. С помощью DoubleAnumation вы можете анимировать значения double, а StoryBoard позволяет комбинировать все анимации, которые связаны между собой.

□ Триггеры. С помощью триггеров вы может запускать и останавливать анимации. Вы уже знакомы с триггерами свойств. Триггеры свойств срабатывают при изменении значения свойств. Вы можете создать триггер события. Такой триггер срабатывает при наступлении события.

Пространство имен для классов анимации - System.Windows.Media.Animation.

Временная шкала

TimeLine определяет то, как значение меняется во времени. Наш первый пример анимирует размер эллипса. Здесь используется DoubleAnimation, представляющая временную шкалу изменения значения double. Свойство Triggers класса Ellipse установлено в EventTrigger. Триггер событий инициируется при загрузке эллипса, как определено в свойстве RoutedEvent объекта EventTrigger. BeginStoryboard - действие триггера, которое запускает раскадровку StoryBoard. С этой раскадровкой используется элемент DoubleAnimation для анимирования свойства Width класса Ellipse. Анимация изменяет ширину эллипса от 100 до 300 за 3 секунды, и обращает эту же анимацию через 3 секунды.

<Window x:Class= EllipseAnimation.Windowl

xmlns= http: schemas.microsoft.com/winfx/2 006/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2006/xaml Title= Ellipse Animation Height= 300 Width= 300 >

<Grid>

<Ellipse Height= 50 Width= l00 Fill= SteelBlue > <Ellipse.Triggers>

<EventTrigger RoutedEvent= Ellipse.Loaded > <EventTrigger.Actions> <BeginStoryboard>

<Storyboard Duration= 00:00:06 RepeatBehavior= Forever > <DoubleAnimation

Storyboard.TargetProperty= (Ellipse.Width) Duration= 0:0:3 AutoReverse= True FillBehavior= Stop RepeatBehavior= Forever AccelerationRatio= 0.9 DecelerationRatio= 0.1 From= 100 To= 300 />



</Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Ellipse.Triggers> </Ellipse> </Grid> </Window>

На рис. 35.17 и 35.18 показаны два состояния анимированного эллипса.



Рис. 35.17. Эллипс с шириной 100

Рис. 35.18. Эллипс с шириной 300

Речь идет об анимации, представляющей собой нечто большее, чем обычная оконная анимация, которая появляется на экране постоянно и немедленно. Вы можете добавить анимацию к бизнес-приложениям, что сделает пользовательский интерфейс более отзывчивым.

Следующий пример демонстрирует приличную анимацию, и также показывает, как анимация может быть определена в стиле. Внутри ресурсов Window вы можете видеть стиль AnimatedButtonStyle для кнопок. В шаблоне определяется прямоугольник по имени outline. Шаблон имеет тонкий контур шириной 0.4.

Шаблон определяет триггер свойств для свойства IsMouseOver. Свойство EnterActions этого триггера применяется, как только курсор мыши перемещается над кнопкой. Действие запуска - BeginStoryboard. Действие триггера BeginStoryboard может включать, а потому и запускать элементы Storyboard. Элемент Storyboard определяет DoubleAnimation для анимации значения double. Значение свойства, изменяемой в этой анимации - это Rectangle.StrokeThickness элемента Rectangle по имени outline. Значение плавно изменяется на 1.2, как задает свойство By, в течение периода 0.3 секунды, что указано в свойстве Duration. В конце анимации толщина штриха сбрасывается в свое исходное значение, поскольку установлено AutoReverse= True . В итоге имеем следующее: как только курсор мыши перемещается над кнопкой, толщина контура увеличивается на 1.2 в течение 0.3 секунды. На рис. 35.19 показана кнопка без анимации, а на рис. 35.20 - кнопка в момент через 0.3 секунды после начала движения мыши. К сожалению, показать анимацию со всеми промежуточными видами в печатном документе невозможно.

<Window x:Class= AnimationSample.ButtonAnimation

xmlns= http: schemas.microsoft.com/winfx/20 06/xaml/presentation

xmlns:x= http: schemas.microsoft.com/winfx/200 6/xaml

Title= Animation Sample Height= 300 Width= 300 > <Window.Resources>

<Style x:Key= AnimatedButtonStyle TargetType= {x:Type Button} > <Setter Property= Template >



1 ... 6 7 8 [ 9 ] 10 11 12 ... 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика