Опубликован: 05.08.2010 | Доступ: свободный | Студентов: 2009 / 47 | Оценка: 4.50 / 4.40 | Длительность: 60:26:00
Самостоятельная работа 10:

Текст WPF

  • Зарегистрированные в элементах TextBox обработчики событий TextChanged заполните в файле Window1.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
    
namespace WpfText1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
    
            // Заполняем коллекции и подключаем их к спискам ListBox
            this.fontFamilyListBox.ItemsSource = FontPropertyLists.FontFaces;
            this.fontWeightListBox.ItemsSource = FontPropertyLists.FontWeights;
            this.fontSizeListBox.ItemsSource = FontPropertyLists.FontSizes;
    
            // Выполняется после XAML
            this.fontSizeListBox.SelectedIndex = this.fontSizeListBox.Items.Count - 1;
            this.fontSizeListBox.ScrollIntoView(this.fontSizeListBox.Items.Count - 1);
        }
    
        // Сокрытие унаследованных от Window одноименных свойств
        new public FontFamily FontFamily
        {
            get { return (FontFamily)this.fontFamilyListBox.SelectedItem; }
            set
            {
                this.fontFamilyListBox.SelectedItem = value;    // Выделить
                this.fontFamilyListBox.ScrollIntoView(value);   // Прокрутить до видимого
            }
        }
        new public FontWeight FontWeight
        {
            get { return (FontWeight)this.fontWeightListBox.SelectedItem; }
            set
            {
                this.fontWeightListBox.SelectedItem = value;    // Выделить
                this.fontWeightListBox.ScrollIntoView(value);   // Прокрутить до видимого
            }
        }
        new public double FontSize
        {
            get { return (double)this.fontSizeListBox.SelectedItem; }
            set
            {
                this.fontSizeListBox.SelectedItem = value;      // Выделить
                this.fontSizeListBox.ScrollIntoView(value);     // Прокрутить до видимого
            }
        }
    
        private void fontFamilyTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            // Привести ListBox в соответствие с содержимым TextBox
            this.FontFamily = new FontFamily(this.fontFamilyTextBox.Text);
        }
    
        private void fontWeightTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            // Привести ListBox в соответствие с содержимым TextBox
            if (FontPropertyLists.CanParseFontWeight(this.fontWeightTextBox.Text))
            {
                this.FontWeight = FontPropertyLists.ParseFontWeight(this.fontWeightTextBox.Text);
            }
        }
    
        private void fontSizeTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            // Привести ListBox в соответствие с содержимым TextBox
            double fontSize;
            if (double.TryParse(this.fontSizeTextBox.Text, out fontSize))
            {
                this.FontSize = fontSize;   // В поле действительно число
            }
        }
    }
}
  • Запустите проект - получим инструмент для просмотра основных атрибутов библиотечного текстового элемента Label


  • Обратите внимание, как компоновка окна сохраняется при изменении его размеров и что окно имеет минимальный размер. Разберитесь с кодом разметки и процедурным кодом C#

Элемент TextBlock с анимацией

Текстовый элемент TextBlock поддерживает способы программирования Windows и стили Web. Он обладает развитыми средствами анимации и динамического программирования стилей. Настройки элемента можно задавать в декларативном ( XAML ) и процедурном ( C# ) режимах. Проиллюстрируем некоторые возможности элемента TextBlock на примере.

  • Добавьте в файл Window1.xaml проекта WpfText1 вкладку TextBlock1 со следующей разметкой
<!--Вкладка TextBlock1-->
        <TabItem Header="TextBlock1">
            <Border Background="Black">
                <Border Margin="25" CornerRadius="50" BorderThickness="2" BorderBrush="Yellow">
                    
                    <!--Радиальный градиент заливки Border-->
                    <Border.Background>
                        <RadialGradientBrush>
                            <GradientStop Color="Blue" Offset="0.1" />
                            <!--Непрозрачный alfa-канал и 000000 (Black)-->
                            <GradientStop Color="#FF000000" Offset="1.2" />
                        </RadialGradientBrush>
                    </Border.Background>
                
                    <!--Анимация градиентной подсветки внешнего контура Border-->
                    <Border.BitmapEffect>
                        <OuterGlowBitmapEffect x:Name="glow" GlowColor="Yellow" GlowSize="0" />
                    </Border.BitmapEffect>
                    <Border.Triggers>
                        <EventTrigger RoutedEvent="Border.Loaded">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation 
                                        Storyboard.TargetName="glow"
                                        Storyboard.TargetProperty="GlowSize"
                                        From="30" To="0" Duration="0:0:1" 
                                        AutoReverse="True"
                                        RepeatBehavior="Forever" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Border.Triggers>
                    
                    <!--Текстовый блок-->
                    <TextBlock Name="text" 
                               Text=""
                               HorizontalAlignment="Center" 
                               VerticalAlignment="Center" 
                               Foreground="White" FontSize="16"
                               Initialized="text_Initialized"
                               >
                        <TextBlock.Inlines>
                            <Bold>Это текстовый</Bold>
                            <LineBreak />
                            <Italic>элемент TextBlock</Italic>
                            <LineBreak />
                            <Run FontWeight="Bold" Foreground="Red">
                                Очень
                            </Run>
                            <Run FontStyle="Italic" TextDecorations="Underline" Foreground="Yellow">
                                красивый
                            </Run>
                        </TextBlock.Inlines>
                        
                        <!--Действия в TextBlock-->
                        <TextBlock.LayoutTransform>
                            <RotateTransform x:Name="rotateTransform" Angle="0" />
                        </TextBlock.LayoutTransform>
                        <TextBlock.Triggers>
                            <!--Анимация поворота-->
                            <EventTrigger RoutedEvent="TextBlock.MouseDown">
                                <EventTrigger.Actions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation
                                                Storyboard.TargetName="rotateTransform"
                                                Storyboard.TargetProperty="Angle"
                                                From="0" To="360" Duration="0:0:3"
                                                RepeatBehavior="2x"
                                                />
                                        </Storyboard>
                                    </BeginStoryboard>  
                                </EventTrigger.Actions>
                            </EventTrigger>    
                            <!--Анимация изменения размера при заходе мыши-->  
                            <EventTrigger RoutedEvent="TextBlock.MouseEnter">
                                <EventTrigger.Actions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation
                                                Storyboard.TargetName="text" 
                                                Storyboard.TargetProperty="FontSize"
                                                To="26" Duration="0:0:0.2"
                                                />  
                                        </Storyboard>
                                    </BeginStoryboard> 
                                </EventTrigger.Actions>
                            </EventTrigger>
                            <!--Анимация изменения размера при сходе мыши-->  
                            <EventTrigger RoutedEvent="TextBlock.MouseLeave">
                                <EventTrigger.Actions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation
                                                Storyboard.TargetName="text" 
                                                Storyboard.TargetProperty="FontSize"
                                                Duration="0:0:1"
                                                />    
                                        </Storyboard>
                                    </BeginStoryboard> 
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </TextBlock.Triggers>
                    </TextBlock>
                </Border>
            </Border>
        </TabItem>
  • Добавьте в процедурную часть (файл Window1.xaml.cs ) код обработчика события Initialized элемента TextBlock, который в динамическом режиме дополняет декларативную настройку этого текстового элемента
private void text_Initialized(object sender, EventArgs e)
        {
            // Добавляем в TextBlock строку
            Run run = new Run("\nDynamic");
            run.FontFamily = new FontFamily("Curlz MT");
            text.Inlines.Add(run);
            run = new Run("Text");
            run.FontFamily = new FontFamily("Comic Sans MS");
            run.Foreground = Brushes.Aqua;
            text.Inlines.Add(new Bold(run));
        }
  • Запустите проект - получим анимационный текст с персональными настройками стилей


  • Изучите приведенный код
Алексей Бабушкин
Алексей Бабушкин

При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.Xna.Framework.Graphics;

   

namespace Application1

{

    public partial class MainForm : Form

    {

        // Объявим поле графического устройства для видимости в методах

        GraphicsDevice device;

   

        public MainForm()

        {

            InitializeComponent();

   

            // Подпишемся на событие Load формы

            this.Load += new EventHandler(MainForm_Load);

   

            // Попишемся на событие FormClosed формы

            this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed);

        }

   

        void MainForm_FormClosed(object sender, FormClosedEventArgs e)

        {

            //  Удаляем (освобождаем) устройство

            device.Dispose();

            // На всякий случай присваиваем ссылке на устройство значение null

            device = null;       

        }

   

        void MainForm_Load(object sender, EventArgs e)

        {

            // Создаем объект представления для настройки графического устройства

            PresentationParameters presentParams = new PresentationParameters();

            // Настраиваем объект представления через его свойства

            presentParams.IsFullScreen = false; // Включаем оконный режим

            presentParams.BackBufferCount = 1;  // Включаем задний буфер

                                                // для двойной буферизации

            // Переключение переднего и заднего буферов

            // должно осуществляться с максимальной эффективностью

            presentParams.SwapEffect = SwapEffect.Discard;

            // Устанавливаем размеры заднего буфера по клиентской области окна формы

            presentParams.BackBufferWidth = this.ClientSize.Width;

            presentParams.BackBufferHeight = this.ClientSize.Height;

   

            // Создадим графическое устройство с заданными настройками

            device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware,

                this.Handle, presentParams);

        }

   

        protected override void OnPaint(PaintEventArgs e)

        {

            device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);

   

            base.OnPaint(e);

        }

    }

}

Выбрасывается исключение:

Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл.

Делаю все пунктуально. В чем может быть проблема?