Добро пожаловать на мой блог

The world is yours

WPF

автор: admin | Октябрь 14, 2010 | Раздел: Жизнь

1.Архитетура WPF.

2.XAML.

3.Основы XAML.

Можно почитать : Петцольд, Троэлсон, Андерсон,Мак-Дональд.

WPF- windows presentation foundation.

Варианты приложений WPF:

  1. Настольные приложения – сборка запускается на локальной машине (текстовый редактор, плэйер и тд и тп).
  2. WPF приложения на основе навигации-это приложения под WIndows  у которых интерфейс похож на веб-браузер.
  3. Приложения XBAP – приложения которые возможно размещать внутри веб-браузера.
  4. SilverLight – это подключаемый модуль к браузерами.

Архитетура WPF:

На рис. присутствуют следующие ключевые компоненты:

  1. PresentationFramework.dll содержит типы WPF верхнего уровня, включая те, что представляют окна, панели и прочие виды элементов управления. Также он реализует высокоуровневые программные абстракции, такие как стили. Большинство классов, которые вы будете использовать, находятся непосредственно в этой сборке.
  1. PresentationCore.dll содержит базовые типы, такие кале UIElement и Visual, от которых унаследованы все фигуры и элементы управления. Если вам не нужен полный слой абстракции окон и элементов управления, вы можете спуститься ниже, на этот уровень, и продолжать пользоваться преимуществами механизма визуализации WPF
  1. WindowsBase.dll содержит еще более базовые ингредиенты, которые  потенциально могут использоваться вне WPF, такие как DispatcherObject и DependencyObject. поддерживающие механизм свойств зависимости
  1. milcore.dll — ядро системы визуализации WPF и фундамент уровня  медиа-интеграции (Media Integration LayerMIL). Его составной механизм транслирует визуальные элементы в треугольники и текстуры, которых ожидает Direct3D. Хотя milcore.dll считается частью WPF, это также важнейший компонент Windows Vista.
  1. WindowsCodecs .dll — низкоуровневый API, обеспечивающий поддержку  изображений (например, обработку, отображение и масштабирование битовых карт и JPEG).
  1. Direct3D — низкоуровневый API, через который визуализируется вся графика в WPF.
  1. User32 используется для определения того, какое место на экране к какой  программе относится. В результате он по-прежнему вовлечен в WPF, но не участвует в визуализации распространенных элементов управления.

Основные пространства имен WPF

System. Windows

Это корневое пространство имен WPF. Здесь вы найдете основные типы (такие как Application и Window),  которые необходимы любому настольному проекту WPF.

System.Windows .Controls

Здесь вы найдете все ожидаемые виджеты WPF, включая типы для построения систем меню, всплывающих  подсказок и многочисленные диспетчеры компоновки.

System.Windows .Markup

Это пространство имен определяет множество типов, обеспечивающих программный разбор разметки XAML (вместе с эквивалентным двоичным форматом BAML).

System.Windows.Media

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

System.Windows.Navigation

Это пространство имен предоставляет типы для  обеспечения логики навигации, используемой браузерными  приложениями XAML (XBAP), а также настольными приложениями на основе страничной навигационной модели.

System. Windows.Shapes

Это пространство имен определяет различные типы  двухмерной графики (Rectangle, Polygon и т.п.),  используемой разными аспектами каркаса WPF.

Введение XAML – extensible application markup language – расширяемый язык разметки приложений.

Варианты XAML:

1.WPF XAML – включает элементы, которые описывают векторную графику и элементы управления.

2.XPS HAML – используется для форматирования электронных документов.

3.SilverLight XAML – для SilverLight приложений(Браузеров)

4.WF HAML – workflow

Построение WPF:

<!– Здесь определение нашего типа Window –>

<Window x:Class=”SimpleXamlApp.MainWindow”

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”My Xaml App” Height=”200″ Width=”300″

WindowstartupLocation =”CenterScreen”>

<!– Установить содержимое этого окна –>

<Button Width=”133″ Height=”24″ Click =”MbtnExitApp_Clicked”>

Exit Application

</Button>

<!– Реализация обработчика события кнопки Click –>

<x:Code>

<![CDATA[

private void btnExitApp_Clicked(object sender, RoutedEventArgs e)

{

// Получить дескриптор текущего приложения и остановить его.

Application.Current.Shutdown();

}

]]>

</x:Code> </Window>

<!– Похоже, отсутствует метод Main()!

Однако атрибут StartupUri является

его Функциональным эквивалентом –>

<Application x:Class=”SimpleXamlApp.МуАрр”

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

StartupUri=”Window.xaml”>

</Application>

Утилита командной строки:

Msbuild.exe

Основные правила XAML:

Каждый элемент в документе XAML  отображаются на экземпляр класса .NET

XAML – допускает вложение элементов.

Возможно устанавливать свойство и подписываться на события через атрибуты эелементов

На верхним и втором уровне может быть только один элемент

<Button Height=”23.331″ Name=”button1″ Width=”75.548″ Content=”OK” />

Или

<Button Height=”23.331″ Name=”button1″ Width=”75.548″ >OK</Button>

<Button Height=”23.331″ Name=”button1″ Width=”75.548″ ><ScrollBar Height=”10″ Width=”80″/></Button>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Form” Height=”282″ Width=”300″ Cursor=”Arrow” WindowStartupLocation=”CenterScreen” WindowStyle=”SingleBorderWindow” ForceCursor=”False”>

<Button Height=”144.43″ Name=”button1″ Width=”75.548″ Foreground=”DarkTurquoise” BorderBrush=”Cyan”>

<Button.Content>

<ScrollBar Height=”80″ Width=”20″/>

</Button.Content>

<Button.Background>

<LinearGradientBrush StartPoint=”0,0″ EndPoint=”1,1″>

<GradientStop Color=”AliceBlue”  Offset=”0″/>

<GradientStop Color=”Black” Offset=”0.7″/>

</LinearGradientBrush>

</Button.Background>

</Button>

</Window>

<Canvas  Name=”canvas1″>

<Button Canvas.Left=”10″ Canvas.Top=”15″ Height=”23.331″ Name=”button1″ Width=”75.548″>Button</Button>

<Button Canvas.Left=”50″ Canvas.Top=”85″ Height=”23.331″ Name=”button2″ Width=”75.548″>Button</Button>

<Button Canvas.Left=”100″ Canvas.Top=”100″ Height=”23.331″ Name=”button3″ Width=”75.548″>Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”110″ Height=”23.331″ Name=”button4″ Width=”75.548″>Button</Button>

</Canvas>

<StackPanel  Name=”canvas1″>

<Button Canvas.Left=”10″ Canvas.Top=”15″ Height=”23.331″ Name=”button1″ Width=”75.548″>Button</Button>

<Button Canvas.Left=”50″ Canvas.Top=”85″ Height=”23.331″ Name=”button2″ Width=”75.548″>Button</Button>

<Button Canvas.Left=”100″ Canvas.Top=”100″ Height=”23.331″ Name=”button3″ Width=”75.548″>Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”100″ Height=”23.331″ Name=”button4″ Width=”75.548″>Button</Button>

</StackPanel>

<StackPanel  Name=”canvas1″ Orientation=”Horizontal” MinHeight=”20″ MinWidth=”50″>

<Button Canvas.Left=”10″ Canvas.Top=”15″ Margin=”20,20,20,20″ Name=”button1″ >Button</Button>

<Button Canvas.Left=”50″ Canvas.Top=”85″  Name=”button2″ Width=”20″ HorizontalAlignment=”Right”>Button</Button>

<Button Canvas.Left=”100″ Canvas.Top=”100″  Name=”button3″ >Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”100″  Name=”button4″>Button</Button>

</StackPanel>

<WrapPanel Name=”canvas1″ Orientation=”Horizontal” MinHeight=”20″ MinWidth=”50″>

<Button Canvas.Left=”70″ Canvas.Top=”100″  Name=”button4″ Width=”100″ Height=”100″ Padding=”3″ Margin=”3″>Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”100″  Name=”button5″ Width=”100″ Height=”100″ Padding=”3″ Margin=”3″>Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”100″  Name=”button3″ Width=”100″ Height=”100″ Padding=”3″ Margin=”3″>Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”100″  Name=”button6″ Width=”100″ Height=”100″ Padding=”3″ Margin=”3″>Button</Button>

<Button Canvas.Left=”70″ Canvas.Top=”100″  Name=”button1″ Width=”100″ Height=”100″ Padding=”3″ Margin=”3″>Button</Button>

</WrapPanel>

<DockPanel >

<Button Name=”button4″ Height=”10″ DockPanel.Dock=”Top”>Button</Button>

<Button Name=”button2″ Height=”10″ DockPanel.Dock=”Bottom”>Button</Button>

<Button Name=”button1″ Width=”10″ DockPanel.Dock=”Left”>Button</Button>

<Button Name=”button5″ Width=”10″ DockPanel.Dock=”Right”>Button</Button>

<Button Name=”button6″ >Button</Button>

</DockPanel>

<DockPanel >

<WrapPanel   Orientation=”Horizontal” DockPanel.Dock=”Top”>

<Button Name=”button1″ Height=”50″ Width=”50″>Button</Button>

<Button Name=”button2″ Height=”50″ Width=”50″>Button</Button>

<Button Name=”button3″ Height=”50″ Width=”50″>Button</Button>

<Button Name=”button4″ Height=”50″ Width=”50″>Button</Button>

<Button Name=”button5″ Height=”50″ Width=”50″>Button</Button>

<Button Name=”button6″ Height=”50″ Width=”50″>Button</Button>

<Button Height=”50″ Name=”button7″ Width=”50″>Button</Button>

<Button Height=”50″ Name=”button8″ Width=”50″>Button</Button>

</WrapPanel>

<StackPanel Orientation=”Horizontal” DockPanel.Dock=”Bottom” HorizontalAlignment=”Right”>

<Button Height=”50″ Name=”button11″ Width=”100″>Button</Button>

<Button Height=”50″ Name=”button10″ Width=”100″ >Button</Button>

</StackPanel>

<Button  Name=”button9″>Button</Button>

</DockPanel>

<Grid>

<Grid.ColumnDefinitions>

<ColumnDefinition></ColumnDefinition>

<ColumnDefinition></ColumnDefinition>

</Grid.ColumnDefinitions>

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition></RowDefinition>

</Grid.RowDefinitions>

<Button Grid.Column=”0″ Grid.Row=”0″ Content=”1″/>

<Button Grid.Column=”1″ Grid.Row=”1″ Content=”2″/>

<Button Grid.Column=”0″ Grid.Row=”1″ Content=”3″/>

<Button Grid.Column=”1″ Grid.Row=”0″ Content=”4″/>

</Grid>

<Grid ShowGridLines=”false” >

<Grid.ColumnDefinitions >

<ColumnDefinition Width=”100″></ColumnDefinition>

<ColumnDefinition></ColumnDefinition>

<ColumnDefinition Width=”auto”></ColumnDefinition>

</Grid.ColumnDefinitions>

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition></RowDefinition>

</Grid.RowDefinitions>

<Button Grid.Column=”0″ Grid.Row=”0″ Content=”1″/>

<Button Grid.Column=”1″ Grid.Row=”0″ Content=”2″/>

<Button Grid.Column=”2″ Grid.Row=”0″ Content=”3″/>

<Button Grid.Column=”0″ Grid.Row=”1″ Content=”4″  Grid.ColumnSpan=”2″/>

<Button Grid.Column=”1″ Grid.Row=”1″ Content=”5″  />

</Grid>

Зависимый свойство

Маршрутизируемие собитие

Предлогает след. Примучество:

- могут наследоват свое значение под определение xaml родительского элемента

- поддерживает возможност установки значение  внечними типами

- позволяет wpf вычислять значение на основе внечних значение

- зависимы свойство допускает статическая хронение свое даны

Как создается зависимие св-ва :

1-      создание поля типа DependencyProperty  (статическая)

2-      регистрация св-ва зависимости ” в статическом конструкторе

3-      Определение свойства оболочки.

4- Помещение поля в обычное свойство CLR.

5- Аксессоры set и get возвращают результат косвенно.Используя метода get value и set value

public class FrameworkElement : UIElement, IFrameworkInputElement,

IInputElement, ISupportInitialize, IHaveResources

{

// Обратите внимание, что это статическое поле типа DependencyProperty.

public static readonly DependencyProperty HeightProperty;

// Статическое поле DependencyProperty создано и

// “зарегистрировано” в статическом конструкторе.

static FrameworkElement()

{

HeightProperty = DependencyProperty.Register(

“Height”,

typeof(double),

typeof(FrameworkElement),

new FrameworkPropertyMetadata((double)1.0 / (double)0.0,

FrameworkPropertyMetadataOptions.AffectsMeasure,

new PropertyChangedCallback(FrameworkElement.OnTransformDirty)),

new ValidateValueCallback(FrameworkElement.IsWidthHeightValid));

}

// Обратите внимание, что свойство Height по-прежнему имеет блоки get/set.

// Однако реализация использует унаследованные методы GetValue () /SetValue() .

public double Height

{

get { return (double)base.GetValue(HeightProperty); }

set { base.SetValue(HeightProperty, value); }

}

}

Виды маршрутизируемых событий.

  1. События перемещаются от точки возникновения вверх к другим определенным контекстам.
  2. Туннельное событие – перемещается от точки возникновения вниз к связанным под элементам.
  3. Прямое событие -  событие возникает и обрабатывается в исходном элементе.

<Button Name=”btnClickMe” Height=”75″ Width = “250″ Click =”btnClickMe_Clicked”>

<StackPanel Orientation =”Horizontal”>

<Label Height=”50″ FontSize =”20″>Fancy Button!</Label>

<Canvas Height =”50″ Width =”100″ >

<Ellipse Name = “outerEllipse” Fill =”Green” Height =”25″

Width =”50″ Cursor=”Hand” Canvas.Left=”25″ Canvas.Top=”12″/>

<Ellipse Name = “innerEllipse” Fill =”Yellow” Height = “15″ Width =”36″

Canvas.Top=”17″ Canvas.Left=”32″/>

</Canvas>

</StackPanel>

</Button>

//////////////////////////////////////////

string str;

public MainWindow()

{

InitializeComponent();

}

private void btnClickMe_Click(object sender, RoutedEventArgs e)

{

str += “nButton”;

Label.Content = str;

e.Handled = false;

}

private void outerEllipse_MouseDown(object sender, MouseButtonEventArgs e)

{

str += “nouterEllipse”;

Label.Content = str;

e.Handled = true;// попробуйте изменять

}

private void btnClickMe_PreviewMouseDown(object sender, MouseButtonEventArgs e)

{

str += “nPrewButton”;

Label.Content = str;

e.Handled = false;

}

Последовательность действий подготовки к созданию окна нестандартной формы:

  1. Для свойства окна нужно установить свойства AllowTransparency – TRUE.
  2. Установить свойства windowStyle – NONE
  3. Для свойства background установить прозрачный цвет(transparency)

Способы обеспечения эффекта необычной формы:

  1. Реализовать фоном графику используя графический файл.
  2. Использовать функции WPF  для векторного рисования.
  3. Использование элемента WPF.

Для перемещения нужно создать режим перемещения окна посредством инициализирования режима перемещения окна путем вызова метода DragMove.

Изменения размера:

  1. установить свойство resizeMode.

<Path Stroke=”DarkGray” StrokeThickness=”1″ SnapsToDevicePixels=”True” Margin=”0,0,46,28″>

<Path.Data>

<CombinedGeometry GeometryCombineMode=”Union”>

<CombinedGeometry.Geometry1>

<CombinedGeometry GeometryCombineMode=”Exclude”>

<CombinedGeometry.Geometry1>

<EllipseGeometry Center=”50 50″ RadiusX=”50″ RadiusY=”50″></EllipseGeometry>

</CombinedGeometry.Geometry1>

<CombinedGeometry.Geometry2>

<EllipseGeometry Center=”50 50″ RadiusX=”40″ RadiusY=”40″></EllipseGeometry>

</CombinedGeometry.Geometry2>

</CombinedGeometry>

</CombinedGeometry.Geometry1>

<CombinedGeometry.Geometry2>

<RectangleGeometry Rect=”44 5 10 90″>

<RectangleGeometry.Transform>

<RotateTransform Angle=”45″ CenterX=”50″ CenterY=”50″></RotateTransform>

</RectangleGeometry.Transform>

</RectangleGeometry>

</CombinedGeometry.Geometry2>

</CombinedGeometry>

</Path.Data>

<Path.Fill>

<LinearGradientBrush StartPoint=”0.2,0″ EndPoint=”0.8,1″ >

<LinearGradientBrush.GradientStops>

<GradientStop Color=”White”  Offset=”0″></GradientStop>

<GradientStop Color=”White”  Offset=”0.45″></GradientStop>

<GradientStop Color=”LightBlue” Offset=”0.9″></GradientStop>

<GradientStop Color=”Gray” Offset=”1″></GradientStop>

</LinearGradientBrush.GradientStops>

</LinearGradientBrush>

</Path.Fill>

<Path.RenderTransform>

<ScaleTransform ScaleX=”1.3″ ScaleY=”1.3″></ScaleTransform>

</Path.RenderTransform>

</Path>

<Window.Background>

<ImageBrush>

<ImageBrush.ImageSource>

<BitmapImage UriSource=”C:Documents and SettingsКолосветов.ЕвгенийРабочий столWpfApplication1WpfApplication1binDebugfon.png” />

</ImageBrush.ImageSource>

</ImageBrush>

</Window.Background>

</Window>

Классы используемые в страничном интерфейсе:

  1. Page.
  2. NavigationWindow
  3. Frame

Построение программ с помощью Page  и navigationWindow

NavigationWindow nw = (NavigationWindow)Window.GetWindow(this);

<TextBlock> <Hyperlink NavigateUri=”page1.xaml”>first page</Hyperlink></TextBlock>

—————————————————-

Команда – это “Особенные события”, которые независят от какого либо элемента управления и могут применятся к большому количеству различных элементов управления.

Компоненты комманды:

1.Комманда состоит из объектов представляющего собой задачу.

2.Привязка данных

3. Источник комманд.

4. Целевой объект это элемент для которого выполняется комманда.

public interface ICommand

{

// Возникает, когда происходит изменение режима,

// должна или нет выполняться данная команда.

event EventHandler CanExecuteChanged;

// Задает метод, определяющий, может ли

// команда выполняться в ее данном состоянии.

bool CanExecute(object parameter);

// Определяет метод, вызываемый для выполнения команды.

void Execute(object parameter);

}

Интерфейс: ICommand;

Класс: RoutedCommand;

Класс: RoutedUICommand; (Text)

1.    ApplicationCommands. Этот класс предоставляет общие команды, включая  команды, связанные с буфером обмена (такие как Сору (Копировать), Cut (Вырезать) и Paste (Вставить)), и команды, касающиеся обработки документов (вроде New (Создать), Open (Открыть), Save (Сохранить), SaveAs (Сохранить как), Print (Печать) и т.д.).

2.    NavigationCommands. Этот класс предоставляет команды, используемые для  навигации, включая те, что предназначены для страничных приложений  (наподобие команды BrowseBack (Назад), BrowseForward (Вперед) и NextPage (Переход)), и те, что подходят для приложений, предназначенных для работы с документами (вроде команды IncreaseZoom (Масштаб) и Refresh (Обновить)).

3.    EditingCommands. Этот класс предоставляет длинный перечень команд,  предназначенных по большей части для редактирования документов, включая  команды для перемещения (MoveToLineEnd (Переход в конец строки), MoveLeftByWord (Переход влево на одно слово), MoveUpByPage (Переход на одну страницу вверх) и т.д.), выделения содержимого (SelectToLineEnd (Выделение до конца  строки), Select Left By Word (Выделение слова слева)) и изменения  форматирования (ToggleBold (Выделение полужирным) и ToggleUnderline (Выделение подчеркиванием)).

4.    MediaCommands. Этот класс включает набор команд для работы с мультимедиа (среди которых команда Play (Воспроизвести), Pause (Пауза), NextTrack (Переход к следующей композиции) и IncreaseVolume (Увеличение громкости)).

5.    ComponentsCommands. MoveDown, MoveFocusBack, MoveLeft, MoveRight, ScrollToEnd, ScrollToHome

<Window x:Class=”Commands.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<StackPanel Orientation=”Vertical”>

<Menu >

<MenuItem Header=”File” >

<MenuItem Header=”Open” />

<MenuItem Header=”Save” />

<MenuItem Header=”Close” />

</MenuItem>

<MenuItem Header=”Edit” >

<MenuItem Command=”ApplicationCommands.Copy” />

<MenuItem Command=”ApplicationCommands.Paste” />

<MenuItem Command=”ApplicationCommands.Cut” />

</MenuItem>

</Menu>

<TextBox Height=”217″ Cursor=”Arrow”></TextBox>

</StackPanel>

</Window>

<Window x:Class=”Commands.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.CommandBindings>

<CommandBinding

Command=”Open”

Executed=”CommandBinding_Executed”>

</CommandBinding>

</Window.CommandBindings>

<StackPanel Orientation=”Vertical”>

<Menu >

<MenuItem Header=”File” >

<MenuItem Command=”Open” />

<MenuItem Command=”Save” />

<MenuItem Command=”Close” />

</MenuItem>

<MenuItem Header=”Edit” >

<MenuItem Command=”ApplicationCommands.Copy” />

<MenuItem Command=”ApplicationCommands.Paste” />

<MenuItem Command=”ApplicationCommands.Cut” />

</MenuItem>

</Menu>

<TextBox Height=”63″ Cursor=”Arrow”></TextBox>

<Button Command=”Save”>Save</Button>

<Button Command=”Open”>Open</Button>

<Button Command=”Close”>Close</Button>

</StackPanel>

</Window>

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)

{

MessageBox.Show(“I am Is Opened”);

}

private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e)

{

MessageBox.Show(“I am Is Saved”);

}

private void CommandBinding_Executed_2(object sender, ExecutedRoutedEventArgs e)

{

MessageBox.Show(“I am Is Closed”);

Application.Current.Shutdown();

}

RoutedUICommand

1.Двоичные.

2.Объектные.

Самый низкий уровенЪ:

using System.Windows.Resources;

using System.Reflection;

using System.Resources;

using System.Globalization;

using System.IO;

Assembly assembly = Assembly.GetAssembly(this.GetType());

string resourceName = assembly.GetName().Name + “.g”;

ResourceManager rm = new ResourceManager(resourceName, assembly);

ResourceSet set = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true);

UnmanagedMemoryStream s;

// Второй параметр (true) выполняет поиск ресурса с учетом регистра.

s = (UnmanagedMemoryStream)set.GetObject(“Pic/fon.png”, true);

BitmapImage bi = new BitmapImage();

bi.BeginInit();

bi.StreamSource = s;

bi.EndInit();

this.Background = new ImageBrush(bi);

С помощью класса:

StreamResourceInfo sri = Application.GetResourceStream(

new Uri(“Pic/fon.png”, UriKind.Relative));

BitmapImage bi = new BitmapImage();

bi.BeginInit();

bi.StreamSource = sri.Stream;

bi.EndInit();

this.Background = new ImageBrush(bi);

1)

Image i = new Image();

i.Source = new BitmapImage(new Uri(@”D:ШагWPFЗанятие 8fon.png”));

gr.Children.Add(i);

Но в случае применения относительного URI можно извлечь из сборки другой ресурс и передать его изображению безо всякого объекта UnmanagedMemoryStream:

2)

Image i = new Image();

i.Source = new BitmapImage(new Uri(“Pic/fon.png”, UriKind.Relative));

gr.Children.Add(i);

3)

<Image Source=”Pic/fon.png”></Image>

У каждого элемента есть свойства в котором можно хранить коллецию  типа ResoucesDictionary.

Особенности работы с ресурсами:

  1. каждый элемент имеет собственную коллекцию ресурсов

<Window x:Class=”res.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<ImageBrush ImageSource=”pic/2.png” x:Key=”Brush1″/>

<ImageBrush ImageSource=”pic/1.jpg” x:Key=”Brush2″/>

</Window.Resources>

<StackPanel>

<Button Height=”23″ Name=”button1″  Background=”{StaticResource Brush1}”>Button</Button>

<Button Height=”23″ Name=”button2″  Background=”{StaticResource Brush1}”>Button</Button>

<Button Height=”23″ Name=”button3″ Background=”{StaticResource Brush2}”>Button</Button>

<Button Height=”23″ Name=”button4″ Background=”{StaticResource Brush2}”>Button</Button>

</StackPanel>

</Window>

2.Поиск необходимого ресурса WPF производит рекурсивно по дереву элементов.

3. Если применяется статический ресурс, то его определение должно быть всегда перед ссылкой на него

Свойство BuildAction должно быть установлено в значение PAGE.

Нужно объедить файл с коллекцией ресурсов.

Application х:Class=”Resources.Арр”

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

StartupUri=”Menu.xaml” >

Application.Resources>

<ResourceDictionary>

<ResourceDictionary.MergedDictionaries>

<ResourceDictionary Source=”AppBrushes.xaml”/>

<ResourceDictionary Source=”WizardBrushes.xaml”/>

</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

</Application.Resources>

</Application

Стили и триггеры:

С помощью ресурсов неудобно:

<Window x:Class=”teststyle.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<FontFamily x:Key=”ButtonFontFamily”>Arial</FontFamily>

<SolidColorBrush x:Key=”ButtonBrush”>Red</SolidColorBrush>

</Window.Resources>

<Canvas>

<Button Canvas.Left=”95″ Canvas.Top=”52″ Height=”23″ Name=”button1″ Width=”75″ FontFamily=”{StaticResource ButtonFontFamily}” Background=”{StaticResource ButtonBrush}”>Button</Button>

<Button Canvas.Left=”163″ Canvas.Top=”107″ Height=”23″ Name=”button2″ Width=”75″>Button</Button>

<Button Canvas.Left=”95″ Canvas.Top=”164″ Height=”23″ Name=”button3″ Width=”75″>Button</Button>

<Button Canvas.Left=”30″ Canvas.Top=”107″ Height=”23″ Name=”button4″ Width=”75″>Button</Button>

</Canvas>

</Window>

<Window x:Class=”teststyle.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<Style TargetType=”{x:Type Button}”>

<Style.Setters>

<Setter Property=”Control.FontFamily” Value=”Arial”/>

<Setter Property=”Control.Background” Value=”Red”/>

<EventSetter Event=”Control.MouseEnter” Handler=”OnMouseEnter”/>

<EventSetter Event=”Control.MouseLeave” Handler=”OnMouseLeave”/>

</Style.Setters>

</Style>

</Window.Resources>

<Canvas>

<Button Canvas.Left=”95″ Canvas.Top=”52″ Height=”23″ Name=”button1″ Width=”75″ >Button</Button>

<Button Canvas.Left=”163″ Canvas.Top=”107″ Height=”23″ Name=”button2″ Width=”75″>Button</Button>

<Button Canvas.Left=”95″ Canvas.Top=”164″ Height=”23″ Name=”button3″ Width=”75″>Button</Button>

<Button Canvas.Left=”30″ Canvas.Top=”107″ Height=”23″ Name=”button4″ Width=”75″>Button</Button>

</Canvas>

</Window>

Триггер – это группа операторов, которая вызывается в ответ на изменение свойств либо события.

Все триггеры основаны на базовом классе Trigger Base.

Классы наследники Trigger Base.

Date trigger.

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

<Window x:Class=”teststyle.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<Style TargetType=”{x:Type Button}”>

<Style.Setters>

<Setter Property=”Control.FontFamily” Value=”Arial”/>

<Setter Property=”Control.Background” Value=”Red”/>

<EventSetter Event=”Control.MouseEnter” Handler=”OnMouseEnter”/>

<EventSetter Event=”Control.MouseLeave” Handler=”OnMouseLeave”/>

</Style.Setters>

<Style.Triggers>

<Trigger Property=”Control.IsFocused” Value=”true”>

<Setter Property=”Control.Background” Value=”Black”/>

</Trigger>

</Style.Triggers>

</Style>

</Window.Resources>

<Canvas>

<Button Canvas.Left=”95″ Canvas.Top=”52″ Height=”23″ Name=”button1″ Width=”75″ >Button</Button>

<Button Canvas.Left=”163″ Canvas.Top=”107″ Height=”23″ Name=”button2″ Width=”75″>Button</Button>

<Button Canvas.Left=”95″ Canvas.Top=”164″ Height=”23″ Name=”button3″ Width=”75″>Button</Button>

<Button Canvas.Left=”30″ Canvas.Top=”107″ Height=”23″ Name=”button4″ Width=”75″>Button</Button>

</Canvas>

</Window>

Event Trigger:

<Window x:Class=”teststyle.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<Style TargetType=”{x:Type Button}”>

<Style.Setters>

<Setter Property=”Control.FontFamily” Value=”Arial”/>

<Setter Property=”Control.Background” Value=”Red”/>

<EventSetter Event=”Control.MouseEnter” Handler=”OnMouseEnter”/>

<EventSetter Event=”Control.MouseLeave” Handler=”OnMouseLeave”/>

</Style.Setters>

<Style.Triggers>

<!–<Trigger Property=”Control.IsFocused” Value=”true”>

<Setter Property=”Control.Background” Value=”Black”/>

</Trigger>–>

<EventTrigger RoutedEvent=”Control.MouseLeave”>

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Duration=”0:0:0.31″ Storyboard.TargetProperty=”FontSize” To=”12″/>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

<EventTrigger RoutedEvent=”Control.MouseEnter”>

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Duration=”0:0:0.3″ Storyboard.TargetProperty=”FontSize” To=”721″/>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

</Style.Triggers>

</Style>

</Window.Resources>

<Canvas>

<Button Canvas.Left=”95″ Canvas.Top=”52″  Name=”button1″  >Button</Button>

<Button Canvas.Left=”163″ Canvas.Top=”107″  Name=”button2″>Button</Button>

<Button Canvas.Left=”95″ Canvas.Top=”164″  Name=”button3″ >Button</Button>

<Button Canvas.Left=”30″ Canvas.Top=”107″ Name=”button4″>Button</Button>

</Canvas>

</Window>

SUPER:

<Window x:Class=”teststyle.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″ AllowsTransparency=”True” Background=”Transparent” WindowStyle=”None” KeyDown=”Window_KeyDown” MouseLeftButtonDown=”Window_MouseLeftButtonDown”>

<Border Margin=”25″ CornerRadius=”50″>

<Border.Triggers>

<EventTrigger RoutedEvent=”Border.Loaded”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation

Storyboard.TargetName=”glow”

Storyboard.TargetProperty=”GlowSize”

From=”25″ To=”0″ Duration=”0:0:3″ AutoReverse=”True”

RepeatBehavior=”Forever” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Border.Triggers>

<Border.BitmapEffect>

<OuterGlowBitmapEffect x:Name=”glow” GlowColor=”Blue” GlowSize=”25″ />

</Border.BitmapEffect>

<Border.Background>

<RadialGradientBrush>

<GradientStop Color=”#FF000000″ Offset=”1″ />

<GradientStop Color=”Blue” Offset=”0″ />

</RadialGradientBrush>

</Border.Background>

<TextBlock Name=”text” Text=”Здравствуй, мир WPF!” HorizontalAlignment=”Center”

VerticalAlignment=”Center” Foreground=”White” FontSize=”18″>

<TextBlock.LayoutTransform>

<RotateTransform x:Name=”rotateTransform” Angle=”0″ />

</TextBlock.LayoutTransform>

<TextBlock.Triggers>

<EventTrigger RoutedEvent=”TextBlock.MouseEnter”>

<BeginStoryboard>

<Storyboard>

<!–Анимация изменения размера–>

<DoubleAnimation

Storyboard.TargetName=”text”

Storyboard.TargetProperty=”FontSize”

From=”18″ To=”36″ Duration=”0:0:5″

RepeatBehavior=”1x”

/>

<!–Анимация поворота–>

<DoubleAnimation

Storyboard.TargetName=”rotateTransform”

Storyboard.TargetProperty=”Angle”

From=”0″ To=”360″ Duration=”0:0:5″

RepeatBehavior=”1x” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

<EventTrigger RoutedEvent=”TextBlock.MouseLeave”>

<BeginStoryboard>

<Storyboard>

<!–Анимация изменения размера–>

<DoubleAnimation

Storyboard.TargetName=”text”

Storyboard.TargetProperty=”FontSize”

From=”36″ To=”18″ Duration=”0:0:5″

RepeatBehavior=”1x”

/>

<!–Анимация поворота–>

<DoubleAnimation

Storyboard.TargetName=”rotateTransform”

Storyboard.TargetProperty=”Angle”

From=”0″ To=”360″ Duration=”0:0:5″

RepeatBehavior=”1x” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</TextBlock.Triggers>

</TextBlock>

</Border>

</Window>

using System;

using System.Collections.Generic;

using System.Linq;

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 teststyle

{

/// <summary>

/// Interaction logic for Window1.xaml

/// </summary>

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

}

private void radioButton1_Checked(object sender, RoutedEventArgs e)

{

button1.Style = (Style)this.FindResource(“my”);

}

private void radioButton2_Checked(object sender, RoutedEventArgs e)

{

button1.Style = (Style)this.FindResource(“my1″);

}

}

}

<Window x:Class=”teststyle.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”162″ Width=”300″>

<Window.Resources>

<Style x:Key=”my”>

<Style.Setters>

<Setter Property=”Control.Background” Value=”Yellow”/>

</Style.Setters>

</Style>

<Style x:Key=”my1″>

<Style.Setters>

<Setter Property=”Control.Background” Value=”Blue”/>

</Style.Setters>

</Style>

</Window.Resources>

<Canvas>

<Button Canvas.Left=”0″ Canvas.Top=”0″ Height=”72″ Name=”button1″ Width=”278″>Welcome user!</Button>

<RadioButton Canvas.Left=”12″ Canvas.Top=”87″ Height=”16″ Name=”radioButton1″ Width=”120″ Checked=”radioButton1_Checked”>Winter</RadioButton>

<RadioButton Canvas.Left=”138″ Canvas.Top=”87″ Height=”16″ Name=”radioButton2″ Width=”120″ Checked=”radioButton2_Checked”>Summer</RadioButton>

</Canvas>

</Window>

Визуризация двухмерной графики

WPF- использует графику опрошенного режима

WPF- отвечает за сохранение и правильное образование

GDI statetul mode

GDI+ immediate mode

WPF retained mode]

WPF существует 3-и способа

  1. Прстранство имён Shapes
  2. Рисование, задействование класса System windows Media.Drawing

3. Использование наследование класса System windows Media.Visual

<StackPanel>

<Rectangle Height=”55″  Width=”105″  Stroke=”Blue”

StrokeThickness=”5″  Fill=”LightBlue”/>

</StackPanel>

<StackPanel>

<Rectangle Height=”55″  Width=”105″  Stroke=”Blue”

StrokeThickness=”5″  Fill=”LightBlue”/>

</StackPanel>

2.

<Image Height=”55″  Width=”105″>

<Image.Source>

<DrawingImage>

<DrawingImage.Drawing>

<GeometryDrawing Brush=”LightBlue”>

<GeometryDrawing.Pen>

<Pen Brush=”Blue” Thickness=”5″/>

</GeometryDrawing.Pen>

<GeometryDrawing.Geometry>

<RectangleGeometry Rect=”0, 0,100,50″/>

</GeometryDrawing.Geometry>

</GeometryDrawing>

</DrawingImage.Drawing>

</DrawingImage>

</Image.Source>

</Image>

<StackPanel>

<Rectangle Height=”55″  Width=”105″  Stroke=”Blue”

StrokeThickness=”5″  Fill=”LightBlue”/>

</StackPanel>

2.

<Image Height=”55″  Width=”105″>

<Image.Source>

<DrawingImage>

<DrawingImage.Drawing>

<GeometryDrawing Brush=”LightBlue”>

<GeometryDrawing.Pen>

<Pen Brush=”Blue” Thickness=”5″/>

</GeometryDrawing.Pen>

<GeometryDrawing.Geometry>

<RectangleGeometry Rect=”0, 0,100,50″/>

</GeometryDrawing.Geometry>

</GeometryDrawing>

</DrawingImage.Drawing>

</DrawingImage>

</Image.Source>

</Image>

3.

public partial class MainWindow : System.Windows.Window

{

// Наш единственный рисующий визуальный объект

private DrawingVisual rectVisual = new DrawingVisual();

private const int NumberOfVisualItems = 1;

public MainWindow()

{

InitializeComponent();

// Вспомогательная функция для создания прямоугольника

CreateRectVisual();

}

// Вспомогательная функция для создания прямоугольника

private void CreateRectVisual()

{

using (DrawingContext drawCtx = rectVisual.RenderOpen())

{

// Верхняя, левая, нижняя и правая позиции прямоугольника

Rect rect = new Rect(50, 50, 105, 55);

drawCtx.DrawRectangle(Brushes.AliceBlue, new Pen(Brushes.Blue, 5), rect);

}

// Зарегистрируем наш визуальный элемент в дереве объектов, чтобы

// гарантировать поддержку маршрутизируемых событий, проверку попадания и

AddVisualChild(rectVisual);

AddLogicalChild(rectVisual);

}

// Необходимые переопределения. Графическая система WPF вызовет

// это для определения того, сколько элементов надо визуализировать,

//и что именно в них визуализировать.

protected override int VisualChildrenCount

{

get { return NumberOfVisualItems; }

}

protected override Visual GetVisualChild(int index)

{

// Нумерация элементов в коллекции начинается с нуля, поэтому вычитаем 1.

if (index != (NumberOfVisualItems – 1))

throw new ArgumentOutOfRangeException(“index”, “Don’t have that visual!”);

return rectVisual;

}

}

<Window x:Class=”drawing.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<StackPanel>

<Line Stroke=”Black” StrokeThickness=”5″ X1=”5″ X2=”100″ Y1=”2″ Y2=”60″></Line>

<Rectangle Stroke=”Aqua” Width=”100″ StrokeThickness=”5″></Rectangle>

<Ellipse Stroke=”Green”  Height=”100″ Stretch=”Fill”/>

</StackPanel>

</Window>

http://forum.codenet.ru/archive/index.php/t-38545.html

http://forum.algolist.ru/source-implementation-programm/1917-problema-so-strokami-v-s.html

http://forum.vingrad.ru/forum/topic-50128.html

http://forum.codenet.ru/showthread.php?t=57492

http://www.cyberforum.ru/cpp-beginners/thread23643.html

http://forum.vingrad.ru/topic-192735.html

http://eh-c.blogspot.com/

http://www.tramvision.ru/words/ana.htm

Тип Назначение

MatrixTransform Создает произвольную матричную трансформацию, используемую для манипуляций объектами или координатными

системами на двухмерной плоскости.

RotateTransform Поворачивает объект по часовой стрелке вокруг заданной точки в

двумерной (х, у) системе координат.

ScaleTransform Масштабирует объект в двумерной (х, у) системе координат.

SkewTransform Сдвигает объект в двумерной (х, у) системе координат.

TransformGroup Представляет составной Transform, состоящий из других объектов

Transform.

<Window x:Class=”drawing.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Viewbox >

<Canvas Width=”241″ Height=”246″>

<Rectangle Stroke=”Bisque” StrokeThickness=”2″ Height=”121″ Width=”142″ Canvas.Left=”57″ Canvas.Top=”68″ >

<Rectangle.RenderTransform>

<RotateTransform Angle=”45″></RotateTransform>

</Rectangle.RenderTransform>

</Rectangle>

<Ellipse Height=”100″ Stroke=”Aquamarine” Width=”96″ Canvas.Left=”78″ Canvas.Top=”79″></Ellipse>

</Canvas>

</Viewbox>

</Window>

<Window x:Class=”drawing.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Viewbox >

<Canvas Width=”241″ Height=”246″>

<Rectangle Stroke=”Bisque” StrokeThickness=”2″ Height=”121″ Width=”142″ Canvas.Left=”57″ RenderTransformOrigin=”0.5,0.5″ Canvas.Top=”68″ >

<Rectangle.RenderTransform>

<RotateTransform Angle=”45″></RotateTransform>

</Rectangle.RenderTransform>

</Rectangle>

<Ellipse Height=”100″ Stroke=”Aquamarine” Width=”96″ Canvas.Left=”78″ Canvas.Top=”79″></Ellipse>

</Canvas>

</Viewbox>

</Window>

Тип кисти Назначение

DrawingBrush Рисует область с помощью объекта-наследника Drawing

(GeometryDrawing, ImageDrawing или VideoDrawing).

imageBrush Заполняет область изображением (представленным объектом

ImageSource).

LinearGradientBrush Кисть, используемая для закрашивания области линейным градиентом.

RadiaiLGradientBrush Кисть, используемая для закрашивания области радиальным градиентом.

SolidColorBrush Кисть сплошного цвета, устанавливаемого через свойство Color.

VisualBrush Заполняет область объектом-наследником Visual (DrawingVisual,

Viewport3DVisual и ContainerVisual).

<!– A rectangle with a linear fill –>

<Rectangle RadiusX =”15″ RadiusY =”15″ Height =”40″ Width =”100″>

<Rectangle.Fill>

<LinearGradientBrush StartPoint=”0,0.5″ EndPoint=”1,0.5″>

<GradientStop Color=”LimeGreen” Offset=”0.0″ />

<GradientStop Color=”Orange” Offset=”0.25″ />

<GradientStop Color=”Yellow” Offset=”0.75″ />

<GradientStop Color=”Blue” Offset=”1.0″ />

</LinearGradientBrush>

</Rectangle.Fill>

</Rectangle>

<!– An ellipse with a radial fill –>

<Ellipse  Height =”75″ Width =”75″>

<Ellipse.Fill>

<RadialGradientBrush GradientOrigin=”0.5,0.5″

Center=”0.5,0.5″ RadiusX=”0.5″ RadiusY=”0.5″>

<GradientStop Color=”Yellow” Offset=”0″ />

<GradientStop Color=”Red” Offset=”0.25″ />

<GradientStop Color=”Blue” Offset=”0.75″ />

<GradientStop Color=”LimeGreen” Offset=”1″ />

</RadialGradientBrush>

</Ellipse.Fill>

</Ellipse>

<Window x:Class=”drawing.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″ Background=”White”>

<Grid Background=”Green”>

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition></RowDefinition>

</Grid.RowDefinitions>

<TextBox Name=”textBox1″ FontSize=”25″ Height=”48″ VerticalAlignment=”Top” Background=”White” BorderThickness=”5″ BorderBrush=”Green” />

<Rectangle Margin=”0,54,0,13″ RenderTransformOrigin=”0.5,0.5″>

<Rectangle.Fill>

<VisualBrush Visual=”{Binding ElementName=textBox1}”>

</VisualBrush>

</Rectangle.Fill>

<Rectangle.RenderTransform>

<ScaleTransform ScaleY=”-1″></ScaleTransform>

</Rectangle.RenderTransform>

<Rectangle.OpacityMask>

<LinearGradientBrush StartPoint=”0,0″ EndPoint=”0,1″>

<GradientStop Offset=”0″ Color=”Transparent”/>

<GradientStop Offset=”1″ Color=”#66000000″/>

</LinearGradientBrush>

</Rectangle.OpacityMask>

</Rectangle>

</Grid>

</Window>

BlurBitmapEffect

Размывает содержимое вашего элемента.BevelBitmapEffect

Добавляет выпуклую рамку вокруг

содержимого.

EmbossBitmapEffect

Создает эффект “тиснения”, выделяя

границы и линии, как если бы они были вырезаны

или выдавлены.

OuterGlowBitmapEf feet Добавляет цветное сияние вокруг вашего

содержимого.

DropShadowBitmapEffect Добавляет прямоугольную отбрасываемую

тень за вашим элементом.

BitmapEffectGroup

Применяет комбинацию битовых эффектов.

Порядок указания эффектов имеет значение,

поскольку каждый применяется поверх

существующих. BitmapEf fectGroup

используется редко, поскольку умножает накладные

расходы. Другими словами, кнопка с

четырьмя эффектами требует вчетверо больше

обработки, чем кнопка с одним эффектом.

http://msdn.microsoft.com/ru-ru/library/system.windows.media.effects.bevelbitmapeffect(VS.90).aspx

http://msdn.microsoft.com/ru-ru/library/system.windows.media.effects.embossbitmapeffect(v=VS.90).aspx

http://msdn.microsoft.com/ru-ru/library/system.windows.media.effects.dropshadowbitmapeffect(v=VS.90).aspx

<Window x:Class=”drawing.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″ Background=”White”>

<Grid Background=”Green”>

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition></RowDefinition>

</Grid.RowDefinitions>

<TextBox Name=”textBox1″ FontSize=”25″ Height=”48″ VerticalAlignment=”Top” Background=”White” BorderThickness=”5″ BorderBrush=”Green”  >

<TextBox.BitmapEffect>

<!–<BlurBitmapEffect Radius=”2″></BlurBitmapEffect>–>

<!–<EmbossBitmapEffect LightAngle=”20″></EmbossBitmapEffect>–>

<DropShadowBitmapEffect  ></DropShadowBitmapEffect >

</TextBox.BitmapEffect>

</TextBox>

<Rectangle Margin=”0,54,0,13″ RenderTransformOrigin=”0.5,0.5″>

<Rectangle.Fill>

<VisualBrush Visual=”{Binding ElementName=textBox1}”>

</VisualBrush>

</Rectangle.Fill>

<Rectangle.RenderTransform>

<ScaleTransform ScaleY=”-1″></ScaleTransform>

</Rectangle.RenderTransform>

<Rectangle.OpacityMask>

<LinearGradientBrush StartPoint=”0,0″ EndPoint=”0,1″>

<GradientStop Offset=”0″ Color=”Transparent”/>

<GradientStop Offset=”1″ Color=”#66000000″/>

</LinearGradientBrush>

</Rectangle.OpacityMask>

</Rectangle>

</Grid>

</Window>

<Pen Thickness=”10″  LineJoin=”Round” EndLineCap=”Triangle” StartLineCap=”Round” />

<Pen Thickness=”10″  LineJoin=”Round” EndLineCap=”Triangle”

StartLineCap=”Round” DashStyle = “{x:Static DashStyles.DashDotDot}” />

DrawingGroup Используется для комбинации коллекции отдельных экземпляров типов-

наследников Drawing в единую составную визуализацию.

GeometryDrawing Используется для визуализации двухмерных фигур.

GlyphRunDrawing Используется для визуализации текстовых данных с применением служб

графической визуализации WPF.

ImageDrawing Используется для визуализации файла изображения в границах

прямоугольника.

VideoDrawing Используется для воспроизведения (а не “рисования”) аудио- или

видеофайла. Этот тип может полностью применяться в процедурном коде. Если хотите

воспроизводить видео через XAML, больше подойдет тип MediaPlayer.

LineGeometry Представляет прямую линию. Геометрический эквивалент фигуры Line.

RectangleGeometry Представляет прямоугольник (необязательно — с закругленными

углами). Геометрический эквивалент фигуры Rectangle.

EllipseGeometry Представляет эллипс. Геометрический эквивалент фигуры Ellipse.

GeometryGroup Добавляет любое количество объектов Geometry к единственному

пути, используя правило заполнения EvenOdd или NonZero для

определения заполняемых областей.

CombinedGeometry Объединяет две геометрии в единую фигуру. Свойство CombineMode

позволяет указать способ комбинирования составляющих.

PathGeometry Представляет более сложную фигуру, состоящую из дуг, кривых и

линий, которая может быть как разомкнутой, так и замкнутой.

StreamGeometry Доступный только для чтения облегченный эквивалент PathGeometry.

StreamGeometry экономит память, поскольку не хранит в памяти

сразу все индивидуальные сегменты вашего пути. Однако однажды создан-

ный объект не может быть модифицирован.

<Rectangle Fill=”Yellow” Stroke=”Blue” Width=”50″  Height=”50″ ></Rectangle>

в следующий код разметки, использующий элемент Path:

<Path Fill=”Yellow” Stroke=”Blue”>

<Path.Data>

<RectangleGeometry Rect=”0,0,50,50″>

</RectangleGeometry>

</Path.Data>

</Path>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Grid>

<Rectangle Fill=”Yellow” Stroke=”Blue” Width=”50″  Height=”50″ ></Rectangle>

<Path Fill=”Yellow” Stroke=”Blue”>

<Path.Data>

<RectangleGeometry Rect=”0,0,50,50″>

</RectangleGeometry>

</Path.Data>

</Path>

<Path Fill=”Black” Stroke=”red”>

<Path.Data>

<LineGeometry StartPoint=”25,5″ EndPoint=”50,500″>

</LineGeometry>

</Path.Data>

</Path>

<Path Fill=”Green” Stroke=”Blue”>

<Path.Data>

<EllipseGeometry Center=”200,25″ RadiusX=”100″ RadiusY=”20″>

</EllipseGeometry>

</Path.Data>

</Path>

</Grid>

</Window>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Grid>

<Path Fill=”Aqua” Stroke=”Blue” StrokeThickness=”3″>

<Path.Data>

<GeometryGroup FillRule=”EvenOdd”>

<EllipseGeometry RadiusX=”10″ RadiusY=”10″ Center=”65,65″></EllipseGeometry>

<EllipseGeometry RadiusX=”10″ RadiusY=”10″ Center=”110,110″></EllipseGeometry>

<RectangleGeometry Rect=”50,50,75,75″></RectangleGeometry>

</GeometryGroup>

</Path.Data>

</Path>

</Grid>

</Window>

<Window.Resources>

<GeometryGroup FillRule=”EvenOdd” x:Key=”MyGeometry”>

<EllipseGeometry RadiusX=”20″ RadiusY=”20″ Center=”90,90″/>

<RectangleGeometry Rect=”20,20,100,100″/>

<EllipseGeometry RadiusX=”20″ RadiusY=”20″ Center=”50,50″/>

</GeometryGroup>

</Window.Resources>

<Path Fill=”Aqua” Stroke=”Blue” StrokeThickness=”5″ Data=”{StaticResource MyGeometry}” />

<Path Fill=”Aqua” Stroke=”Blue” StrokeThickness=”5″ Data=”{StaticResource MyGeometry}” />

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Grid>

<Path Fill=”LightGreen” Stroke=”Green” StrokeThickness=”5″ Grid.Column=”3″ Margin=”10″ Canvas.Left=”182″ Canvas.Top=”69″>

<Path.Data>

<CombinedGeometry GeometryCombineMode=”Exclude”>

<CombinedGeometry.Geometry1>

<EllipseGeometry RadiusX=”50″ RadiusY=”50″ Center=”50,70″></EllipseGeometry>

</CombinedGeometry.Geometry1>

<CombinedGeometry.Geometry2>

<EllipseGeometry RadiusX=”50″ RadiusY=”50″ Center=”90,60″></EllipseGeometry>

</CombinedGeometry.Geometry2>

</CombinedGeometry>

</Path.Data>

</Path>

</Grid>

</Window>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Grid>

<Path Stroke=”Aqua” StrokeThickness=”0″>

<Path.Data>

<CombinedGeometry GeometryCombineMode=”Union”>

<CombinedGeometry.Geometry1>

<CombinedGeometry GeometryCombineMode=”Xor”>

<CombinedGeometry.Geometry1>

<EllipseGeometry RadiusX=”75″ RadiusY=”75″ Center=”120,120″></EllipseGeometry>

</CombinedGeometry.Geometry1>

<CombinedGeometry.Geometry2>

<EllipseGeometry RadiusX=”50″ RadiusY=”50″ Center=”120,120″></EllipseGeometry>

</CombinedGeometry.Geometry2>

</CombinedGeometry>

</CombinedGeometry.Geometry1>

<CombinedGeometry.Geometry2>

<RectangleGeometry Rect=”130,0,25,100″>

<RectangleGeometry.Transform>

<RotateTransform Angle=”45″ CenterX=”50″ CenterY=”50″></RotateTransform>

</RectangleGeometry.Transform>

</RectangleGeometry>

</CombinedGeometry.Geometry2>

</CombinedGeometry>

</Path.Data>

<Path.Fill>

<LinearGradientBrush StartPoint=”0.1,0″ EndPoint=”0.8,1″ >

<LinearGradientBrush.GradientStops>

<GradientStop Color=”Blue”  Offset=”0.1″></GradientStop>

<GradientStop Color=”BlueViolet”  Offset=”0.1″></GradientStop>

<GradientStop Color=”LightBlue” Offset=”0.5″></GradientStop>

<GradientStop Color=”Gray” Offset=”1″></GradientStop>

</LinearGradientBrush.GradientStops>

</LinearGradientBrush>

</Path.Fill>

</Path>

</Grid>

</Window>

<Path Fill=”AliceBlue” Stroke=”Blue” StrokeThickness=”3″>

<Path.Data>

<PathGeometry>

<PathFigure StartPoint=”0,0″ IsClosed=”True” IsFilled=”True”>

<LineSegment Point=”0,100″/>

<LineSegment Point=”100,100″/>

</PathFigure>

</PathGeometry>

</Path.Data>

</Path>

LineSegment Создает отрезок прямой линии между двумя точками.

ArcSegment Создает эллиптическую дугу между двумя точками.

BezierSegment Создает кривую Безье между двумя точками.

QuadraticBezierSegment Создает упрощенную форму кривой Безье, имеющую одну

контрольную точку вместо двух и вычисляемую быстрее.

PolyLineSegment Создает серию прямых линий. Вы можете получить тот же

эффект, используя множество объектов LineSegment, но

единственный объект PolyLineSegment более лаконичен.

PolyBezierSegment Создает серию кривых Безье.

PolyQuadraticBezierSegment Создает серию упрощенных квадратичных кривых Безье.

http://www.codeproject.com/KB/WPF/PaddingBall.aspx

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”220″ Width=”300″ WindowStyle=”ToolWindow”>

<Canvas Height=”180″>

<Canvas.BitmapEffect>

<DropShadowBitmapEffect></DropShadowBitmapEffect >

</Canvas.BitmapEffect>

<Rectangle Fill=”Black” Height=”156″ Width=”278″> </Rectangle>

<Image Source=”fon.png” Height=”612″ Canvas.Left=”12″ Canvas.Top=”12″ Width=”1063.4″>

<Image.Clip>

<CombinedGeometry GeometryCombineMode=”Union”>

<CombinedGeometry.Geometry1>

<EllipseGeometry RadiusX=”45″ RadiusY=”45″ Center=”150,60″></EllipseGeometry>

</CombinedGeometry.Geometry1>

<CombinedGeometry.Geometry2>

<EllipseGeometry RadiusX=”45″ RadiusY=”45″ Center=”100,60″></EllipseGeometry>

</CombinedGeometry.Geometry2>

</CombinedGeometry>

</Image.Clip>

</Image>

</Canvas>

</Window>

<GeometryDrawing Brush =”LightBlue”>

<GeometryDrawing.Pen>

<Pen Brush =”Blue” Thickness=”5″/>

</GeometryDrawing.Pen>

<GeometryDrawing.Geometry>

<RectangleGeometry Rect=”0,0,100,50″/>

</GeometryDrawing.Geometry>

</GeometryDrawing>

<GeometryDrawing Brush =”LightBlue”>

<GeometryDrawing.Pen>

<Pen Brush =”Blue” Thickness=”5″/>

</GeometryDrawing.Pen>

<GeometryDrawing.Geometry>

<RectangleGeometry Rect=”0,0,100,50″/>

</GeometryDrawing.Geometry>

</GeometryDrawing>

1.

<Image>

<Image.Source>

<DrawingImage>

<DrawingImage.Drawing>

//////////////////////////

</DrawingImage.Drawing>

</DrawingImage>

</Image.Source>

</Image>

2.

<Window.Background>

<DrawingBrush>

<DrawingBrush.Drawing>

/////////////////////////

</DrawingBrush.Drawing>

</DrawingBrush>

</Window.Background>

LineSegment Создает отрезок прямой линии между двумя точками.

ArcSegment Создает эллиптическую дугу между двумя точками.

BezierSegment Создает кривую Безье между двумя точками.

QuadraticBezierSegment Создает упрощенную форму кривой Безье, имеющую одну

контрольную точку вместо двух и вычисляемую быстрее.

PolyLineSegment Создает серию прямых линий. Вы можете получить тот же

эффект, используя множество объектов LineSegment, но

единственный объект PolyLineSegment более лаконичен.

PolyBezierSegment Создает серию кривых Безье.

PolyQuadraticBezierSegment Создает серию упрощенных квадратичных кривых Безье.

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”220″ Width=”300″ WindowStyle=”ToolWindow”>

<Canvas>

<Path Fill=”AliceBlue” Stroke=”Blue” StrokeThickness=”5″>

<Path.Data>

<PathGeometry>

<PathFigure StartPoint=”-50,200″ IsClosed=”false” IsFilled=”True”>

<QuadraticBezierSegment  Point1=”200,50″ Point2=”300,200″></QuadraticBezierSegment  >

</PathFigure>

</PathGeometry>

</Path.Data>

</Path>

</Canvas>

</Window>

Шаблон – инструкции которые описывают набор элементов использующих для построения элементов управления.

public partial class VisualTreeDisplay : System.Windows.Window

{

public VisualTreeDisplay()

{

InitializeComponent();

}

public void ShowVisualTree(DependencyObject element)

{

// Clear the tree.

treeElements.Items.Clear();

// Start processing elements, begin at the root.

ProcessElement(element, null);

}

private void ProcessElement(DependencyObject element, TreeViewItem previousItem)

{

// Create a TreeViewItem for the current element.

TreeViewItem item = new TreeViewItem();

item.Header = element.GetType().Name;

item.IsExpanded = true;

// Check whether this item should be added to the root of the tree

//(if it’s the first item), or nested under another item.

if (previousItem == null)

{

treeElements.Items.Add(item);

}

else

{

previousItem.Items.Add(item);

}

// Check if this element contains other elements.

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)

{

// Process each contained element recursively.

ProcessElement(VisualTreeHelper.GetChild(element, i), item);

}

}

}

VisualTreeDisplay treeDisplay = new VisualTreeDisplay();

treeDisplay.ShowVisualTree(this);

treeDisplay.Show();

<ControlTemplate.Triggers>

<Trigger Property=”IsMouseOver” Value=”True”>

<Setter TargetName=”Border” Property=”Background” Value=”DarkRed” />

</Trigger>

<Trigger Property=”IsPressed” Value=”True”>

<Setter TargetName=”Border” Property=”Background” Value=”IndianRed” />

<Setter TargetName=”Border” Property=”BorderBrush” Value=”DarkKhaki” />

</Trigger>

</ControlTemplate.Triggers>

<Window.Resources>

<SolidColorBrush Color=”Blue” x:Key=”DefaultBackground”></SolidColorBrush>

<ControlTemplate x:Key=”ButtonTemplate” TargetType=”{x:Type Button }”>

<Border  x:Name=”Border”  BorderBrush=”Green”

Background=”{TemplateBinding Background}” BorderThickness=”5″>

<Grid>

<Rectangle Visibility=”Hidden” Stroke=”Black”

StrokeThickness=”1″ StrokeDashArray=”1 2″ SnapsToDevicePixels=”True”></Rectangle>

<ContentPresenter  RecognizesAccessKey=”True”></ContentPresenter>

</Grid>

</Border>

<Style x:Key=”CustomButtonStyle” TargetType=”{x:Type Button}”>

<Setter Property=”Control.Template” Value=”{StaticResource ButtonTemplate}”></Setter>

<Setter Property=”Background” Value=”{StaticResource DefaultBackground}”></Setter>

</Style>

<Button Width=”55″ Height=”55″ Style=”{StaticResource CustomButtonStyle}” Click=”Button_Click”>

A Simple Button with a Custom Template</Button>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<SolidColorBrush Color=”Blue” x:Key=”DefaultBackground”></SolidColorBrush>

<ControlTemplate x:Key=”My” TargetType=”{x:Type Button}”>

<Border Cursor=”Cross” CornerRadius=”60″ Name=”bor”>

<Border.Clip>

<PathGeometry>

<PathFigure StartPoint=”100,100″ IsClosed=”True” IsFilled=”True”>

<LineSegment Point=”0,100″/>

<LineSegment Point=”50,50″/>

</PathFigure>

</PathGeometry>

</Border.Clip>

<Border.Background>

<DrawingBrush>

<DrawingBrush.Drawing>

<GeometryDrawing Brush =”LightBlue”>

<GeometryDrawing.Pen>

<Pen Brush =”Blue” Thickness=”5″/>

</GeometryDrawing.Pen>

<GeometryDrawing.Geometry>

<PathGeometry>

<PathFigure StartPoint=”100,100″ IsClosed=”True” IsFilled=”True”>

<LineSegment Point=”0,100″/>

<LineSegment Point=”50,50″/>

</PathFigure>

</PathGeometry>

</GeometryDrawing.Geometry>

</GeometryDrawing>

</DrawingBrush.Drawing>

</DrawingBrush>

</Border.Background>

</Border>

<ControlTemplate.Triggers>

<Trigger Property=”IsMouseOver” Value=”True”>

<Setter Property=”Background” TargetName=”bor” Value=”Red” >

</Setter>

<Setter Property=”BorderBrush” TargetName=”bor” Value=”Blue” >

</Setter>

</Trigger>

</ControlTemplate.Triggers>

</ControlTemplate>

</Window.Resources>

<Grid Height=”120″ Width=”141″>

<Button Template=”{StaticResource My}” MouseDown=”Button_MouseDown” Click=”Button_Click” Margin=”14,12,0,0″ Height=”100″ VerticalAlignment=”Top”>Кнопка</Button>

<Button Template=”{StaticResource My}” Height=”120″ HorizontalAlignment=”Right” Margin=”0,-114,-95,0″ VerticalAlignment=”Top” Width=”141″></Button>

<!–<Path Fill=”AliceBlue” Stroke=”Blue” StrokeThickness=”3″>

<Path.Data>

<PathGeometry>

<PathFigure StartPoint=”0,0″ IsClosed=”True” IsFilled=”True”>

<LineSegment Point=”0,100″/>

<LineSegment Point=”100,100″/>

</PathFigure>

</PathGeometry>

</Path.Data>

</Path>–>

</Grid>

</Window>

Привязка данных:

Это извленчение информации из объекта и отображение в пользовательском интерфейсе.

Понятие привязки данных:

1.Целевой объект представлен целевым свойством, Это свойство долдно быть свойством зависимости и должно принадлежать элементу WPF

2.Источник – объект из которого получают данные, может быть любым элементов WPF,Объект класса ado.net, база данных.

ElementName  – Элементный источник.

Path – Свойство – источник.

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Canvas>

<Rectangle Width=”{Binding ElementName=slider1,Path=Value}” Height=”{Binding ElementName=slider2,Path=Value}” Canvas.Left=”87″ Canvas.Top=”89″ Fill=”Green” Stroke=”Beige”></Rectangle>

<Slider Height=”22″ Margin=”12,0,34,0″ Name=”slider1″ VerticalAlignment=”Bottom” Canvas.Left=”0″ Canvas.Top=”241″ Width=”254″ Minimum=”10″ Maximum=”100″ />

<Slider HorizontalAlignment=”Right” Margin=”0,12,12,28″ Name=”slider2″ Width=”27″ Orientation=”Vertical” Height=”223″ Canvas.Left=”239″ Canvas.Top=”0″  Minimum=”10″ Maximum=”100″ />

</Canvas>

</Window>

Имя члена   Описание

TwoWay      Вызов изменений исходного свойства для автоматического обновления целевого свойства или наоборот. Этот тип привязки соответствует редактируемым формам или другим полностью интерактивным сценариям Пользовательский интерфейс.

OneWay      Обновляет (целевое) свойство цели привязки при изменении (исходного) свойства источника привязки. Этот тип привязки является подходящим, если связываемый элемент управления доступен только для чтения неявно. Например, можно выполнить привязку к такому источнику, как финансовый символ. Возможно также, что целевое свойство не имеет интерфейса элементов управления, обеспечивающего выполнение изменений, таких как привязанный к данным цвет фона таблицы. Если отслеживание изменений целевого свойства не требуется, с помощью режима привязки OneWay можно избежать дополнительных издержек режима привязки TwoWay.

OneTime     Обновление цели привязки при запуске приложения или изменении контекста данных. Этот тип привязки является подходящим, если используются данные, для которых подходит снимок текущего состояния, или если данные действительно статические. Этот тип привязки также может использоваться, если необходимо инициализировать целевое свойство с некоторым значением из исходного свойства, и контекст данных не известен заранее. Это значительно более простая форма привязки OneWay, обеспечивающая лучшую производительность в случаях, когда изменение исходного значения не происходит.

OneWayToSource    Обновление исходного свойства при изменении целевого свойства.

Default     Использование значения по умолчанию Modeцели привязки. Значение по умолчанию изменяется для каждого свойства зависимости. Как правило, изменяемые пользователем свойства элементов управления, такие как поля и флажки, по умолчанию подлежат двухсторонней привязке, в то время как большинство других свойств по умолчанию подлежат односторонней привязке. Программный способ определения, имеет ли свойство зависимости одностороннюю или двухстороннюю привязку по умолчанию состоит в получении метаданных свойств с помощью GetMetadata и последующей проверке логического значения свойства BindsTwoWayByDefault.

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Canvas>

<Rectangle Name=”rectt” Width=”{Binding ElementName=slider1,Path=Value, Mode=TwoWay}” Height=”{Binding ElementName=slider2,Path=Value,Mode=TwoWay}” Canvas.Left=”87″ Canvas.Top=”89″ Fill=”Green” Stroke=”Beige”></Rectangle>

<Slider Height=”22″ Margin=”12,0,34,0″ Name=”slider1″ VerticalAlignment=”Bottom” Canvas.Left=”0″ Canvas.Top=”241″ Width=”254″ Minimum=”10″ Maximum=”100″ />

<Slider HorizontalAlignment=”Right” Margin=”0,12,12,28″ Name=”slider2″ Width=”27″ Orientation=”Vertical” Height=”223″ Canvas.Left=”239″ Canvas.Top=”0″  Minimum=”10″ Maximum=”100″ />

<Button Canvas.Left=”0″ Canvas.Top=”0″ Height=”23″ Name=”button1″ Width=”75″ Click=”button1_Click”>W</Button>

<Button Canvas.Left=”0″ Canvas.Top=”29″ Height=”23″ Name=”button2″ Width=”75″ Click=”button2_Click”>H</Button>

<TextBox Canvas.Left=”81″ Canvas.Top=”1.861″ Height=”23″ Name=”textBox1″ Width=”26″ Text=”10″/>

<TextBox Canvas.Left=”81″ Canvas.Top=”31″ Height=”23″ Name=”textBox2″ Width=”26″  Text=”10″/>

</Canvas>

</Window>

using System;

using System.Collections.Generic;

using System.Linq;

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 WpfApplication1

{

/// <summary>

/// Interaction logic for Window1.xaml

/// </summary>

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

}

//private void button1_Click(object sender, RoutedEventArgs e)

//{

//    rectt.Width = Convert.ToDouble( textBox1.Text);

//}

//private void button2_Click(object sender, RoutedEventArgs e)

//{

//    rectt.Height = Convert.ToDouble(textBox2.Text);

//}

private void button3_Click(object sender, RoutedEventArgs e)

{

Binding binding1 = new Binding();

binding1.Source = slider1;

binding1.Path = new PropertyPath(“Value”);

binding1.Mode = BindingMode.TwoWay;

rectt.SetBinding(Rectangle.WidthProperty, binding1);

Binding binding2 = new Binding();

binding2.Source = slider2;

binding2.Path = new PropertyPath(“Value”);

binding2.Mode = BindingMode.TwoWay;

rectt.SetBinding(Rectangle.HeightProperty, binding2);

}

private void button4_Click(object sender, RoutedEventArgs e)

{

BindingOperations.ClearAllBindings(rectt);

}

}

}

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Canvas>

<Rectangle Name=”rectt” Width=”{Binding ElementName=slider1,Path=Value, Mode=TwoWay}” Height=”{Binding ElementName=slider2,Path=Value,Mode=TwoWay}” Canvas.Left=”87″ Canvas.Top=”89″ Fill=”Green” Stroke=”Beige”></Rectangle>

<Slider Height=”22″ Margin=”12,0,34,0″ Name=”slider1″ VerticalAlignment=”Bottom” Canvas.Left=”0″ Canvas.Top=”241″ Width=”254″ Minimum=”10″ Maximum=”100″ />

<Slider HorizontalAlignment=”Right” Margin=”0,12,12,28″ Name=”slider2″ Width=”27″ Orientation=”Vertical” Height=”223″ Canvas.Left=”239″ Canvas.Top=”0″  Minimum=”10″ Maximum=”100″ />

<TextBox Canvas.Left=”81″ Canvas.Top=”1.861″ Height=”23″ Name=”textBox1″ Width=”26″ Text=”{Binding ElementName=slider2,Path=Value,Mode=TwoWay}”  />

<TextBox Canvas.Left=”81″ Canvas.Top=”31″ Height=”23″ Name=”textBox2″ Width=”26″  Text=”{Binding ElementName=slider1,Path=Value, Mode=TwoWay}” />

<Button Canvas.Left=”0″ Canvas.Top=”89″ Height=”23″ Name=”button3″ Width=”75″ Click=”button3_Click”>Create</Button>

<Button Canvas.Left=”0″ Canvas.Top=”118″ Height=”23″ Name=”button4″ Width=”75″ Click=”button4_Click”>Clear</Button>

</Canvas>

</Window>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Canvas>

<Rectangle Name=”rectt” Width=”{Binding ElementName=slider1,Path=Value, Mode=TwoWay}” Height=”{Binding ElementName=slider2,Path=Value,Mode=TwoWay}” Canvas.Left=”87″ Canvas.Top=”89″ Fill=”Green” Stroke=”Beige”></Rectangle>

<Slider Height=”22″ Margin=”12,0,34,0″ Name=”slider1″ VerticalAlignment=”Bottom” Canvas.Left=”0″ Canvas.Top=”241″ Width=”254″ Minimum=”10″ Maximum=”100″ />

<Slider HorizontalAlignment=”Right” Margin=”0,12,12,28″ Name=”slider2″ Width=”27″ Orientation=”Vertical” Height=”223″ Canvas.Left=”239″ Canvas.Top=”0″  Minimum=”10″ Maximum=”100″ />

<TextBox Canvas.Left=”81″ Canvas.Top=”1.861″ Height=”23″ Name=”textBox1″ Width=”26″ Text=”{Binding ElementName=slider2,Path=Value,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}”  />

<TextBox Canvas.Left=”81″ Canvas.Top=”31″ Height=”23″ Name=”textBox2″ Width=”26″  Text=”{Binding ElementName=slider1,Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}” />

<Button Canvas.Left=”0″ Canvas.Top=”89″ Height=”23″ Name=”button3″ Width=”75″ Click=”button3_Click”>Create</Button>

<Button Canvas.Left=”0″ Canvas.Top=”118″ Height=”23″ Name=”button4″ Width=”75″ Click=”button4_Click”>Clear</Button>

</Canvas>

</Window>

3 свойства биндинга:

1. Source.

2.RelativeSource.

3.dataContext

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<ImageBrush x:Key=”A” ImageSource=”Машинка.jpg” />

</Window.Resources>

<Canvas>

<TextBox Text=”{Binding Source={StaticResource A},Path=AligmentX}” Width=”100″ Height=”100″>

</TextBox>

</Canvas>

</Window>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<!–<Window.Resources>

<ImageBrush x:Key=”A” ImageSource=”Машинка.jpg” />

</Window.Resources>–>

<Canvas>

<TextBlock>

<TextBlock.Text>

<Binding Path=”Title”>

<Binding.RelativeSource>

<RelativeSource Mode=”FindAncestor” AncestorType=”{x:Type Window}” />

</Binding.RelativeSource>

</Binding>

</TextBlock.Text>

</TextBlock>

</Canvas>

</Window>

  1. На основе таймера.

Threadind.DispatchTimier

  1. Свойства.

Должны быть независимые свойства.

Использование специальных классов специальных типов.

Классификация анимации представляющей собой линейную интерполяцию (посл. Изменение от начального до конечного изменения)

Тип и animation.

Анимация которая произвольно изменяет свойства –Анимация ключевого кадра.

Анимация на основе пути.AnimationUsingPath

DoubleAnimation da = new DoubleAnimation(100, 200, TimeSpan.FromSeconds(2));

rect.BeginAnimation(Rectangle.WidthProperty,da);

using System;

using System.Collections.Generic;

using System.Linq;

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.Animation;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace animation

{

/// <summary>

/// Interaction logic for Window1.xaml

/// </summary>

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

}

private void rect_MouseDown(object sender, MouseButtonEventArgs e)

{

DoubleAnimation da = new DoubleAnimation( 250, TimeSpan.FromSeconds(5));

rect.BeginAnimation(Rectangle.WidthProperty,da);

}

private void Button_Click(object sender, RoutedEventArgs e)

{

DoubleAnimation da = new DoubleAnimation();

rect.BeginAnimation(Rectangle.WidthProperty, da);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

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.Animation;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace animation

{

/// <summary>

/// Interaction logic for Window1.xaml

/// </summary>

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

}

private void rect_MouseDown(object sender, MouseButtonEventArgs e)

{

DoubleAnimation da = new DoubleAnimation( 250, TimeSpan.FromSeconds(5));

rect.BeginAnimation(Rectangle.WidthProperty,da);

}

private void Button_Click(object sender, RoutedEventArgs e)

{

DoubleAnimation da = new DoubleAnimation();

da.To = 50;

rect.BeginAnimation(Rectangle.WidthProperty, da);

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

DoubleAnimation da = new DoubleAnimation();

da.By=50;

rect.BeginAnimation(Rectangle.WidthProperty, da);

rect.BeginAnimation(Rectangle.HeightProperty , da);

}

}

}

Конструкторы

Имя      Описание

Timeline()          Инициализирует новый экземпляр класса Timeline.

Timeline(Nullable<TimeSpan>)   Выполняет инициализацию нового экземпляра класса Timeline с заданным параметром BeginTime.

Timeline(Nullable<TimeSpan>, Duration)            Инициализирует новый экземпляр класса Timeline с заданными свойствами BeginTime и Duration.

Timeline(Nullable<TimeSpan>, Duration, RepeatBehavior)          Инициализирует указанный экземпляр класса Timeline с указанными свойствами BeginTime, Duration и RepeatBehavior.

В начало страницы

Методы

Имя      Описание

AllocateClock   Создает Clock для этого элемента управления Timeline.

ApplyAnimationClock(DependencyProperty, AnimationClock)    Применяет значение AnimationClock к указанному свойству DependencyProperty.Если свойство уже является анимированным, используется поведение переадресации SnapshotAndReplace. (Унаследовано от Animatable.)

ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)            Применяет значение AnimationClock к указанному свойству DependencyProperty.Если свойство уже является анимированным, используется указанное поведение HandoffBehavior. (Унаследовано от Animatable.)

BeginAnimation(DependencyProperty, AnimationTimeline)         Применяет анимацию к указанному свойству DependencyProperty.Анимация начинается при визуализации следующего кадра.Если указанное свойство уже является анимированным, используется поведение переадресации SnapshotAndReplace. (Унаследовано от Animatable.)

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)     Применяет анимацию к указанному свойству DependencyProperty.Анимация начинается при визуализации следующего кадра.Если указанное свойство уже является анимированным, используется указанное поведение HandoffBehavior. (Унаследовано от Animatable.)

CheckAccess    Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject. (Унаследовано от DispatcherObject.)

ClearValue(DependencyProperty)          Очищает локальное значение свойства.Очищаемое свойство задается идентификатором DependencyProperty. (Унаследовано от DependencyObject.)

ClearValue(DependencyPropertyKey)    Очищает локальное значение свойства, доступного только для чтения.Очищаемое свойство задается объектом DependencyPropertyKey. (Унаследовано от DependencyObject.)

Clone   Создает модифицируемый клон данного объекта Timeline, делая глубокие копии значений этого объекта.

CloneCore        Создает экземпляр копии (глубокой копии) заданного объекта Freezable, используя базовые (не анимационные) значения свойств. (Унаследовано от Freezable.)

CloneCurrentValue        Создает изменяемую копию данного объекта Timeline, делая глубокие копии текущих значений этого объекта.

CloneCurrentValueCore Создает экземпляр редактируемой копии (глубокой копии) заданного объекта Freezable, используя текущие значения свойства. (Унаследовано от Freezable.)

CoerceValue     Осуществляет приведение значения указанного свойства зависимостей.Это осуществляется путем вызова какой-либо функции CoerceValueCallback, указанной в метаданных свойства зависимостей, которое существует в вызывающем объекте DependencyObject. (Унаследовано от DependencyObject.)

CreateClock()    Создает новый управляемый объект Clock на основе указанного объекта Timeline.Если этот объект Timeline имеет дочерние объекты, создается дерево часов с этим объектом Timeline в корне.

CreateClock(Boolean)   Создает новый объект Clock на основе этого объекта Timeline и определяет, является ли новый объект Clock управляемым.Если этот объект Timeline имеет дочерние объекты, создается дерево часов с этим объектом Timeline в корне.

CreateInstance  Инициализирует новый экземпляр класса Freezable. (Унаследовано от Freezable.)

CreateInstanceCore       Если реализуется в производном классе, создает новый экземпляр производного класса Freezable. (Унаследовано от Freezable.)

Equals  Определяет, является ли указанный DependencyObject эквивалентом текущего DependencyObject. (Унаследовано от DependencyObject.)

Finalize Позволяет объекту Object попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект Object будет утилизирован в процессе сборки мусора. (Унаследовано от Object.)

Freeze()            Делает текущий объект нередактируемым и определяет для его свойства IsFrozen значение true. (Унаследовано от Freezable.)

FreezeCore       Делает данный объект Timeline неизменяемым или определяет, может ли он быть сделан неизменяемым. (Переопределяет Animatable.FreezeCore(Boolean).)

GetAnimationBaseValue           Возвращает не анимированное значение указанного объекта DependencyProperty. (Унаследовано от Animatable.)

GetAsFrozen    Создает фиксированную копию объекта Freezable, используя базовые (не анимационные) значения свойств.Так как копия является фиксированной, копируются только ссылки на фиксированные вложенные объекты. (Унаследовано от Freezable.)

GetAsFrozenCore         Делает этот экземпляр копией указанного объекта Timeline. (Переопределяет Freezable.GetAsFrozenCore(Freezable).)

GetCurrentValueAsFrozen         Создает фиксированную копию объекта Freezable с использованием текущих значений свойств.Так как копия является фиксированной, копируются только ссылки на фиксированные вложенные объекты. (Унаследовано от Freezable.)

GetCurrentValueAsFrozenCore  Делает данный экземпляр замороженной копией указанного объекта Timeline.Ссылки на ресурсы, привязки данных и анимации не копируются, в отличие от их текущих значений. (Переопределяет Freezable.GetCurrentValueAsFrozenCore(Freezable).)

GetDesiredFrameRate   Возвращает нужную частоту кадров заданного объекта Timeline.

GetHashCode   Возвращает хэш-код для данного DependencyObject. (Унаследовано от DependencyObject.)

GetLocalValueEnumerator         Создает специализированный перечислитель для определения свойств зависимостей, которые локально установили значения для данного DependencyObject. (Унаследовано от DependencyObject.)

GetNaturalDuration       Возвращает продолжительность отдельной итерации этого объекта Timeline.

GetNaturalDurationCore            Возвращает продолжительность отдельной итерации этого объекта Timeline.Этот метод обеспечивает реализацию для объекта GetNaturalDuration.

GetType           Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)

GetValue          Возвращает текущее действующее значение свойства зависимостей в данном экземпляре DependencyObject. (Унаследовано от DependencyObject.)

InvalidateProperty         Повторно вычисляет действующее значение для указанного свойства зависимостей (Унаследовано от DependencyObject.)

MemberwiseClone        Создает неполную копию текущего объекта Object. (Унаследовано от Object.)

OnChanged      Вызывается при изменении текущего объекта Freezable. (Унаследовано от Freezable.)

OnFreezablePropertyChanged(DependencyObject, DependencyObject)            Обеспечивает создание соответствующих указателей контекста для элемента данных типа DependencyObjectType, который был только что задан. (Унаследовано от Freezable.)

OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)  Данный член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для непосредственного использования из кода. (Унаследовано от Freezable.)

OnPropertyChanged     Переопределяет реализацию DependencyObject метода OnPropertyChanged, чтобы также вызывать любые обработчики Changed в ответ на изменение свойства зависимостей типа Freezable. (Унаследовано от Freezable.)

ReadLocalValue           Возвращает локальное значение свойства зависимости, если таковое существует. (Унаследовано от DependencyObject.)

ReadPreamble  Обеспечивает доступ к Freezable из допустимого потока.Наследники объекта Freezable должны вызывать данный метод в начале любого API-интерфейс, который считывает элементы данных, не являющиеся свойствами зависимостей. (Унаследовано от Freezable.)

SetCurrentValue            Задает значение свойства зависимостей, не меняя источник значения. (Унаследовано от DependencyObject.)

SetDesiredFrameRate   Задает нужную частоту кадров заданного объекта Timeline.

SetValue(DependencyProperty, Object)            Задает локальное значение свойства зависимостей, указанного идентификатором этого свойства. (Унаследовано от DependencyObject.)

SetValue(DependencyPropertyKey, Object)      Задает локальное значение доступного только для чтения свойства зависимостей, указанного идентификатором DependencyPropertyKey. (Унаследовано от DependencyObject.)

ShouldSerializeProperty            Возвращает значение, указывающее, следует ли процессам сериализации сериализовать значение для указанного свойства зависимостей. (Унаследовано от DependencyObject.)

ToString           Возвращает объект String, который представляет текущий объект Object. (Унаследовано от Object.)

VerifyAccess    Обеспечивает наличие у вызывающего потока доступ к этому DispatcherObject. (Унаследовано от DispatcherObject.)

WritePostscript Вызывает событие Changed для объекта Freezable и вызывает его метод OnChanged.Классы, которые являются производными от класса Freezable, должны вызывать данный момент в конце любого интерфейса API, который изменяет элементы класса, не сохраненные как свойства зависимостей. (Унаследовано от Freezable.)

WritePreamble  Проверяет, что объект Freezable не заморожен и доступ к нему осуществляется из допустимого контекста потока.Наследники объекта Freezable должны вызывать данный метод в начале любого API-интерфейс, который выполняет запись в элементах данных, не являющихся свойствами зависимостей. (Унаследовано от Freezable.)

В начало страницы

Поля

Имя      Описание

AccelerationRatioProperty        Идентифицирует свойство зависимостей AccelerationRatio.

AutoReverseProperty    Идентифицирует свойство зависимостейAutoReverse.

BeginTimeProperty       Идентифицирует свойство зависимостейBeginTime.

DecelerationRatioProperty        Идентифицирует свойство зависимостей DecelerationRatio.

DesiredFrameRateProperty       Идентифицирует вложенное свойство зависимостей DesiredFrameRate.

DurationProperty          Идентифицирует свойство зависимостейDuration.

FillBehaviorProperty     Идентифицирует свойство зависимостейFillBehavior.

NameProperty  Идентифицирует свойство зависимостейName.

RepeatBehaviorProperty           Идентифицирует свойство зависимостейRepeatBehavior.

SpeedRatioProperty     Идентифицирует свойство зависимостей SpeedRatio.

В начало страницы

Свойства

Имя      Описание

AccelerationRatio         Получает или задает значение, указывающее процент значения свойства Duration шкалы времени, за который выполняется ускорение времени от нулевой до максимальной скорости.

AutoReverse     Получает или задает значение, которое определяет, будет ли шкала времени воспроизводиться в обратном порядке после завершения прямой итерации.

BeginTime        Получает или задает время начала Timeline.

CanFreeze        Возвращает значение, которое показывает, можно ли сделать объект нередактируемым. (Унаследовано от Freezable.)

DecelerationRatio         Получает или задает значение, указывающее процент значения свойства Duration шкалы времени, за который выполняется замедление времени от максимальной до нулевой скорости.

DependencyObjectType           Возвращает DependencyObjectType, который создает обертку для типа CLR данного экземпляра.  (Унаследовано от DependencyObject.)

Dispatcher        Возвращает объект Dispatcher, с которым связан этот объект DispatcherObject. (Унаследовано от DispatcherObject.)

Duration           Получает или задает продолжительность воспроизведения шкалы времени без учета повторов.

FillBehavior      Получает или задает значение, которое определяет поведение объекта Timeline по достижении конца активного периода.

HasAnimatedProperties            Возвращает значение, которое указывает, сопоставлены ли один или несколько объектов AnimationClock любому из свойств зависимостей этого объекта. (Унаследовано от Animatable.)

IsFrozen           Возвращает значение, которое показывает, является ли сейчас объект редактируемым. (Унаследовано от Freezable.)

IsSealed           Получает значение, указывающее, является ли этот экземпляр в данный момент запечатанным (доступным только для чтения). (Унаследовано от DependencyObject.)

Name   Получает или задает имя объекта Timeline.

RepeatBehavior            Получает или задает поведение этой шкалы времени при повторе.

SpeedRatio      Получает или задает скорость течения времени этого объекта Timeline относительно родительского объекта.

В начало страницы

Вложенные свойства

Имя      Описание

DesiredFrameRate        Получает или задает нужную частоту кадров для шкалы времени и ее дочерних шкал времени.

В начало страницы

События

Имя      Описание

Changed          Происходит, когда изменяется класс Freezable или объект, который входит в его состав. (Унаследовано от Freezable.)

Completed       Происходит, когда воспроизведение шкалы времени полностью завершено: шкала времени больше не входит в активный период.

CurrentGlobalSpeedInvalidated Происходит при изменении скорости течения времени для часов шкалы времени.

CurrentStateInvalidated Происходит при обновлении свойства CurrentState объекта Clock шкалы времени.

CurrentTimeInvalidated  Происходит при обновлении свойства CurrentTime объекта Clock шкалы времени.

RemoveRequested       Происходит при удалении часов, созданных для этой шкалы времени или одной из ее родительских шкал времени.

<Window x:Class=”animation.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<StackPanel>

<Rectangle Width=”100″ Height=”100″ StrokeThickness=”10″ Fill=”Red” Name=”rect” Canvas.Left=”85″ Canvas.Top=”12″>

<Rectangle.Stroke>

<LinearGradientBrush StartPoint=”0,0″ EndPoint=”1,1″ >

<GradientStop Color=”Green”  Offset=”0″/>

<GradientStop Color=”White” Offset=”0.7″/>

</LinearGradientBrush>

</Rectangle.Stroke>

<Rectangle.Triggers>

<EventTrigger RoutedEvent=”Rectangle.MouseDown”>

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation  Storyboard.TargetProperty=”Width” Duration=”0:0:5″ From=” 10″ To=”200″/>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

</Rectangle.Triggers>

</Rectangle>

<Button >Redo</Button>

<Button >Add</Button>

</StackPanel>

</Window>

<Window x:Class=”animation.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Window.Resources>

<Style x:Key=”GrowButtonStyle”>

<Style.Triggers>

<Trigger Property=”Button.IsPressed” Value=”True”>

<Trigger.EnterActions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Storyboard.TargetProperty=”Width”

To=”250″ Duration=”0:0:5″></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</Trigger.EnterActions>

</Trigger>

</Style.Triggers>

</Style>

</Window.Resources>

<Button Padding=”10″ Name=”cmdGrow” Height=”40″ Width=”160″ Style=”{StaticResource GrowButtonStyle}”

HorizontalAlignment=”Center” VerticalAlignment=”Center”>

Click and Make Me Grow

</Button>

</Window>

<Window x:Class=”animation.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”250″ Width=”300″>

<Window.Resources>

<Style x:Key=”day”>

<Style.Triggers>

<!–<EventTrigger RoutedEvent=”Image.MouseDown”>

</EventTrigger>–>

<EventTrigger RoutedEvent=”Image.MouseDown”>

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Storyboard.TargetProperty=”Opacity”

From=”0″ To=”1″  Duration=”0:0:1″></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

<EventTrigger RoutedEvent=”Image.MouseUp”>

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Storyboard.TargetProperty=”Opacity”

To=”0″ Duration=”0:0:1″></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

</Style.Triggers>

</Style>

</Window.Resources>

<Canvas>

<Image Source=”day.jpg”>

</Image>

<Image  Style=”{StaticResource day}” Source=”night.jpg”>

</Image>

</Canvas>

</Window>

<Grid >

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

</Grid.RowDefinitions>

<StackPanel Grid.Row=”1″ Orientation=”Horizontal” HorizontalAlignment=”Center” Margin=”5″>

<StackPanel.Triggers>

<EventTrigger RoutedEvent=”Button.Click” SourceName=”cmdStart”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation

Storyboard.TargetName=”imgDay”

Storyboard.TargetProperty=”Opacity”

From=”1″ To=”0″ Duration=”0:0:10″ ></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdPause” RoutedEvent=”Button.Click”>

<PauseStoryboard BeginStoryboardName=”fadeStoryboardBegin”></PauseStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdResume” RoutedEvent=”Button.Click”>

<ResumeStoryboard BeginStoryboardName=”fadeStoryboardBegin”></ResumeStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdStop” RoutedEvent=”Button.Click”>

<StopStoryboard BeginStoryboardName=”fadeStoryboardBegin”></StopStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdMiddle” RoutedEvent=”Button.Click”>

<SeekStoryboard BeginStoryboardName=”fadeStoryboardBegin”

Offset=”0:0:5″></SeekStoryboard>

</EventTrigger>

</StackPanel.Triggers>

<Button>Start</Button>

<Button Name=”cmdPause”>Pause</Button>

<Button Name=”cmdResume”>Resume</Button>

<Button Name=”cmdStop”>Stop</Button>

<Button Name=”cmdMiddle”>Move To Middle</Button>

</StackPanel>

<Image Source=”night.jpg”></Image>

<Image Source=”day.jpg”></Image>

</Grid>

  1. Использование свойства SpeedRation.
  2. SetSpeedRation. –метод в StoryBoard

<Canvas Width=”200″ Height=”150″ Background=”White” x:Name=”Page”>

<Rectangle Canvas.Left=”10″ Canvas.Top=”10″ Width=”50″ Height=”25″  Fill=”skyblue”

Stroke=”red” StrokeThickness=”2″ RenderTransformOrigin=”0.5,0.5″>

<Rectangle.RenderTransform>

<TranslateTransform  x:Name=”myTransform” X=”10″ Y=”10″/>

</Rectangle.RenderTransform>

<Rectangle.Triggers>

<EventTrigger RoutedEvent=”Rectangle.Loaded”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation RepeatBehavior=”Forever”  Storyboard.TargetName=”myTransform”

Storyboard.TargetProperty=”X” From=”10″ To=”180″ Duration=”0:0:05″

AutoReverse=”True” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Rectangle.Triggers>

</Rectangle>

</Canvas>

<Grid>

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

</Grid.RowDefinitions>

<Grid>

<Image Source=”night.jpg”></Image>

<Image Source=”day.jpg”>

<Image.OpacityMask>

<LinearGradientBrush StartPoint=”0,0″ EndPoint=”1,0″>

<GradientStop Offset=”0″ Color=”Transparent” x:Name=”transparentStop” />

<GradientStop Offset=”0″ Color=”Black” x:Name=”visibleStop” />

</LinearGradientBrush>

</Image.OpacityMask>

</Image>

</Grid>

<Button Grid.Row=”1″ Padding=”5″ Margin=”5″>

Start

<Button.Triggers>

<EventTrigger SourceName=”cmdStart” RoutedEvent=”Button.Click”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation

Storyboard.TargetName=”transparentStop”

Storyboard.TargetProperty=”Offset” BeginTime=”0:0:0.2″

From=”0″ To=”1″ Duration=”0:0:1″ ></DoubleAnimation>

<DoubleAnimation

Storyboard.TargetName=”visibleStop”

Storyboard.TargetProperty=”Offset”

From=”0″ To=”1.2″ Duration=”0:0:1.2″ ></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Button.Triggers>

</Button>

</Grid>

<Window x:Class=”WpfApplication1.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”346″ Width=”300″>

<Window.Triggers>

<EventTrigger RoutedEvent=”Button.Click” SourceName=”cmdStart”>

<BeginStoryboard Name=”fadeStoryboardBegin”>

<Storyboard Name=”SB”>

<DoubleAnimation

Storyboard.TargetName=”imgDay”

Storyboard.TargetProperty=”Opacity”

From=”1″ To=”0″ Duration=”0:0:10″ ></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdPause” RoutedEvent=”Button.Click”>

<PauseStoryboard BeginStoryboardName=”fadeStoryboardBegin”></PauseStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdResume” RoutedEvent=”Button.Click”>

<ResumeStoryboard BeginStoryboardName=”fadeStoryboardBegin”></ResumeStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdStop” RoutedEvent=”Button.Click”>

<StopStoryboard BeginStoryboardName=”fadeStoryboardBegin”></StopStoryboard>

</EventTrigger>

<EventTrigger SourceName=”cmdMiddle” RoutedEvent=”Button.Click”>

<SeekStoryboard BeginStoryboardName=”fadeStoryboardBegin”

Offset=”0:0:5″></SeekStoryboard>

</EventTrigger>

</Window.Triggers>

<Grid >

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

<RowDefinition Height=”Auto” MinHeight=”30″></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

<RowDefinition Height=”Auto”></RowDefinition>

</Grid.RowDefinitions>

<StackPanel Grid.Row=”1″ Orientation=”Horizontal” HorizontalAlignment=”Center” Margin=”5″>

<Button Name=”cmdStart”>Start</Button>

<Button Name=”cmdPause”>Pause</Button>

<Button Name=”cmdResume”>Resume</Button>

<Button Name=”cmdStop”>Stop</Button>

<Button Name=”cmdMiddle”>Move To Middle</Button>

</StackPanel>

<StackPanel VerticalAlignment=”Bottom” Height=”21″ Margin=”12,0″>

<Slider Maximum=”1″ Name=”sl1″ ValueChanged=”sl1_ValueChanged” ></Slider>

</StackPanel>

<Image Source=”1/night.jpg”></Image>

<Image Source=”1/day.jpg” Name=”imgDay”></Image>

</Grid>

</Window>

<Canvas Width=”200″ Height=”150″ Background=”White” x:Name=”Page”>

<Rectangle Canvas.Left=”10″ Canvas.Top=”10″ Width=”50″ Height=”25″  Fill=”skyblue”

Stroke=”red” StrokeThickness=”2″ RenderTransformOrigin=”0.5,0.5″>

<Rectangle.RenderTransform>

<TranslateTransform x:Name=”myTransform” X=”10″ Y=”10″/>

</Rectangle.RenderTransform>

<Rectangle.Triggers>

<EventTrigger RoutedEvent=”Rectangle.Loaded”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation RepeatBehavior=”Forever”  Storyboard.TargetName=”myTransform”

Storyboard.TargetProperty=”X” From=”10″ To=”180″

Duration=”0:0:05″ AutoReverse=”True” />

</Storyboard>

</BeginStoryboard>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation RepeatBehavior=”Forever” Storyboard.TargetName=”myTransform”

Storyboard.TargetProperty=”Y”   From=”10″ To=”130″

Duration=”0:0:05″  AutoReverse=”True” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Rectangle.Triggers>

</Rectangle>

</Canvas>

<Canvas Width=”200″ Height=”150″ Background=”White” x:Name=”Page”>

<!–???????? ??????–>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”100″ Height=”50″  Fill=”yellow”

Stroke=”red” StrokeThickness=”4″/>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”50″ Height=”25″  Fill=”green” Stroke=”red”

StrokeThickness=”4″ />

<!–?????????? ??????–>

<Canvas Width=”210″ Height=”210″ Canvas.Left=”0″ Canvas.Top=”0″>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”100″ Height=”50″  Fill=”yellow”

Stroke=”red” StrokeThickness=”4″/>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”50″ Height=”25″ Fill=”green” Stroke=”red”

StrokeThickness=”4″ />

<Canvas.RenderTransform>

<RotateTransform x:Name=”myTransform” Angle=”45″/>

</Canvas.RenderTransform>

<Canvas.Triggers>

<EventTrigger RoutedEvent=”Rectangle.Loaded”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation RepeatBehavior=”Forever” Storyboard.TargetName=”myTransform”

Storyboard.TargetProperty=”Angle” From=”0″  To=”360″

Duration=”0:0:10″ AutoReverse=”True” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Canvas.Triggers>

</Canvas>

</Canvas>

<Canvas>

<!–???????? ??????–>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”100″ Height=”50″  Fill=”yellow”

Stroke=”red” StrokeThickness=”4″/>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”50″ Height=”25″  Fill=”green” Stroke=”red”

StrokeThickness=”4″ />

<!–?????????? ??????–>

<Canvas Width=”200″ Height=”200″ Canvas.Left=”0″ Canvas.Top=”0″ RenderTransformOrigin=”1,1″>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”100″ Height=”50″   Fill=”yellow” Stroke=”red”

StrokeThickness=”4″/>

<Rectangle Canvas.Left=”200″ Canvas.Top=”200″ Width=”50″ Height=”25″  Fill=”green” Stroke=”red”

StrokeThickness=”4″ />

<Canvas.RenderTransform>

<RotateTransform x:Name=”myTransform” Angle=”45″/>

</Canvas.RenderTransform>

<Canvas.Triggers>

<EventTrigger RoutedEvent=”Rectangle.Loaded”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation RepeatBehavior=”Forever” Storyboard.TargetName=”myTransform”

Storyboard.TargetProperty=”Angle” From=”0″ To=”360″

Duration=”0:0:10″  AutoReverse=”True” />

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Canvas.Triggers>

</Canvas>

</Canvas>

<Window x:Class=”animation2.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”300″ Width=”300″>

<Canvas>

<Rectangle Canvas.Left =”5″ Canvas.Top=”5″ Width=”190″ Height=”90″ Stroke=”green”

StrokeThickness=”2″ Fill=”Transparent” />

<Rectangle Canvas.Left=”5″ Canvas.Top=”40″ Width=”20″ Height=”20″ Fill=”red” x:Name=”myRectangle”>

<Rectangle.Triggers>

<EventTrigger RoutedEvent=”Rectangle.Loaded”>

<BeginStoryboard>

<Storyboard>

<DoubleAnimationUsingKeyFrames Storyboard.TargetName=”myRectangle” Storyboard.TargetProperty=”(Canvas.Left)”>

<!–<LinearDoubleKeyFrame KeyTime=”0:0:1″ Value=”130″/>

<LinearDoubleKeyFrame KeyTime=”0:0:2″ Value=”200″/>–>

<DiscreteDoubleKeyFrame KeyTime=”0:0:1″ Value=”130″/>

<DiscreteDoubleKeyFrame KeyTime=”0:0:2″ Value=”200″/>

</DoubleAnimationUsingKeyFrames>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Rectangle.Triggers>

</Rectangle>

</Canvas>

</Window>

<Window.Triggers>

<EventTrigger RoutedEvent=”Button.Click” >

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimationUsingKeyFrames Storyboard.TargetName=”myRectangle”

Storyboard.TargetProperty=”(Canvas.Left)”  >

<SplineDoubleKeyFrame KeyTime=”0:0:5″     KeySpline=”0.3,0 0.6,0.9″ Value=”385″ />

</DoubleAnimationUsingKeyFrames>

<DoubleAnimation Storyboard.TargetName=”myRectangle2″ Storyboard.TargetProperty=”(Canvas.Left)”

To=”385″ Duration=”0:0:5″>

</DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

</Window.Triggers>

<Canvas>

<Rectangle Canvas.Left =”5″ Canvas.Top=”5″ Width=”390″ Height=”90″ Stroke=”green” StrokeThickness=”2″ Fill=”Green” />

<Rectangle Canvas.Left=”40″ Width=”20″ Height=”20″ Fill=”red”/>

<Rectangle Canvas.Left=”40″  Canvas.Top=”80″ Width=”20″ Height=”20″ Fill=”red”/>

<Button Canvas.Left=”21″ Canvas.Top=”116″ Content=”Start” Height=”27″  Width=”56″ />

</Canvas>

<Window x:Class=”animation2.Window1″

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

Title=”Window1″ Height=”303″ Width=”503″>

<Window.Resources>

<PathGeometry x:Key=”path”>

<PathFigure IsClosed=”True”>

<ArcSegment Point=”150,200″ Size=”15,10″ SweepDirection=”Clockwise”></ArcSegment>

<ArcSegment Point=”300,100″ Size=”10,5″ ></ArcSegment>

</PathFigure>

</PathGeometry>

</Window.Resources>

<Canvas Margin=”10″ Width=”456″>

<Path Stroke=”Red” StrokeThickness=”1″ Data=”{StaticResource path}” Canvas.Top=”10″ Canvas.Left=”10″ Height=”220″ Width=”399″>

</Path>

<Button Canvas.Top=”0″ Width=”20″ Height=”20″  x:Name=”myRectangle” Canvas.Left=”10″>

<Button.Triggers>

<EventTrigger RoutedEvent=”Button.Loaded”>

<BeginStoryboard>

<Storyboard >

<DoubleAnimationUsingPath Storyboard.TargetName=”myRectangle”  Storyboard.TargetProperty=”(Canvas.Left)” RepeatBehavior=”Forever” PathGeometry=”{StaticResource path}” Source=”X”/>

<DoubleAnimationUsingPath Storyboard.TargetName=”myRectangle” Storyboard.TargetProperty=”(Canvas.Top)”  RepeatBehavior=”Forever” PathGeometry=”{StaticResource path}” Source=”Y”/>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Button.Triggers>

</Button>

</Canvas>

</Window>

NOTEPAD, задания со стилями, и текст. И радугу и листбокс по макданальду

Мой блог находят по следующим фразам

48 отзыва(-ов) »

  1. [...] EventTrigger RoutedEvent="Control.MouseEnter" [...]

  2. [...] LineGeometry WPF крестик [...]

  3. [...] ellipse silverlight задать позицию [...]

  4. [...] brush.AligmentX [...]

  5. [...] wpf перемещение формы [...]

  6. [...] WPF создание рамки окна как у Word 2010 [...]

  7. [color=blek][size=18]Отдых – он и есть отдых, без разницы где человек отдыхал, да хоть бы и дома: главное, что человек отдохнул.[/size][/color]
    Откроются ветки «фаншань» на юго-западе города, «чанпин» на севере, «ичжуан» на юго-востоке, «дасин» на юге, а также часть линии номер, которая после окончания строительства свяжет район ванцзин на северо-востоке пекина с пригородным районом шуньи. [url=http://www.vacati0n.tk/otkrytki/doc_723.htm]новогодние открытки ретро[/url] По данным социологических исследований, половина отпускников прошлого года остались недовольны тем, как провели лето. [url=http://www.vacati0n.tk/zhivopis/site-531.html]известные картины[/url]
    Недель больше, чем вгоду часа. [url=http://www.vacati0n.tk/kartiny/risunki-karandashom-dlya-nachinauschih.html]рисунки карандашом для начинающих[/url] Тем не менее, выбрать все же придется.
    Список литературы. [url=http://www.vacati0n.tk/zhivopis/page_154.htm]открытки день рождения[/url] Начиная от трансферта и заканчивая экскурсиями вы оплачиваете сразу и, соответственно, в процессе менять уже не можете. [url=http://www.vacati0n.tk/zhivopis/page-764.php]авторские открытки[/url]
    И является одним из районов города. [url=http://www.vacati0n.tk/kartiny/neobychnye-podarki.html]необычные подарки[/url] Лазаревское – это один из лучших курортов россии с населением околотыс.

  8. [...] WPF button command [...]

  9. [...] propertychanged vs coercevalue [...]

  10. [...] C# освободить открытый UriSource [...]

  11. [...] wpf AllowsTransparency производительность [...]

  12. [...] wpf рисование [...]

  13. [...] программное рисование на WPF [...]

  14. [...] wpf перемещение canvas на window [...]

  15. [...] сделать Image.RenderTransform MatrixTransform на wpf [...]

  16. [...] C# WPF завершить this.dragMove() [...]

  17. [...] не работает MouseDown в wpf [...]

  18. [...] DrawRectangle with AnimationClock [...]

  19. [...] анимация template control wpf [...]

  20. [...] textbox закругленная рамка wpf [...]

  21. [...] LinearGradientBrush [...]

  22. [...] wpf всплывающий элемент поверх всех [...]

  23. [...] wpf 2 xaml [...]

  24. [...] C# GeometryDrawing отрезок [...]

  25. [...] c# wpf рисование [...]

  26. [...] wpf всплывающие подсказки [...]

  27. [...] wpf пространство имен [...]

  28. [...] вложение image в rectangle wpf [...]

  29. [...] wpf окна [...]

  30. [...] drawingcontext вписать изображение в прямоугольник [...]

  31. [...] изменение windowstyle WPF [...]

  32. хорош вебресурс http://www.dom-beru.ru/ – Строительство деревянных домов под ключ, деревянные дома цены, [url=http://www.dom-beru.ru/]деревянные дома цены[/url], готовые дома из оцилиндрованного бревна и многое другое.

  33. А вы знаете, что это очень интересно?
    [url=http://www.cuba-solidarity.org.uk/member-offer.asp]http://www.cuba-solidarity.org.uk/member-offer.asp[/url]
    [url=http://this.domain.name/2011/05/how-to-program-the-spartan-3an-evaluation-board/comment-page-1/]http://this.domain.name/2011/05/how-to-program-the-spartan-3an-evaluation-board/comment-page-1/[/url]
    [url=http://www.aia-grandcanyon.org/2010/10/12/december-10th-member-meeting/comment-page-1/]http://www.aia-grandcanyon.org/2010/10/12/december-10th-member-meeting/comment-page-1/[/url]
    [url=http://www.hargrove.org/guestbook.htm]http://www.hargrove.org/guestbook.htm[/url]
    [url=http://ceoroundtableblog.com/2011/03/donald-lohin-axiam-member-in-the-news/]http://ceoroundtableblog.com/2011/03/donald-lohin-axiam-member-in-the-news/[/url]

  34. [...] как сохранить содержимое canvas как jpeg файл в wpf [...]

  35. Внедряя качественно новые подходы в производстве дверных евроручек, наша фирма ООО «Рысь» гарантирует Вам незабываемые впечатления при установке нового комплекта на все двери. На текущий момент мы производим ручки для ВАЗ-ов от классики 2104, -05, -07 до «Приоры» (включая восьмерки, девятки, десятки) и УАЗ-ов 3962, 3303. Подробности на: http://www.td-bobcat.ru и по телефонам: (495)7280870, (963)7829404.

  36. [...] wpf c# treeview mouseleftbuttondown [...]

  37. [...] перетаскивание canvas wpf [...]

  38. [...] wpf rectangle закругленные углы [...]

  39. [...] [wpf] сериализовать bitmapimage [...]

  40. [...] попадание point на line wpf [...]

  41. игровые аппараты на деньги вулкан, покер онлайн на реальные деньги отзывы [url=http://play12.topsoftarchive.com/new1491.html]Стратегия Покера Онлайн[/url] выиграть автомат гараж [url=http://play12.topsoftarchive.com/]Интернет Рулетка Играть[/url]

  42. Hello freand 11309

  43. RE:WPF Валок Кузбасс Томск

  44. Get NoW your $1500 Bonus -> http://casino1.pro

  45. To groom your skin, you should be ingestion foods copious in antioxidants, also as victimisation improvement products that hold antioxidants. With day-by-day asthma control, capital symptoms keep be prevented and it is accomplishable to move in each formula activities. Lamentably the safest situation for your feet are besides the dullest situation [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview5/]purchase generic nizagara line[/url] erectile dysfunction at age 33.
    Provide your personify as it tries to snap you a toxin-free aliveness. Recall of the menage! Nicotine is a stimulation consume [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview6/]cheap top avana 80mg on-line[/url] erectile dysfunction daily medication. You persuade the mind by emotionalizing your thoughts hardbacked by institution. You should hump that examination studies know been conducted which let ended that trunk lancinate throne jumper to ticker disease afterwards on in life, too as courageousness contagion. Time you savor what you’re uptake [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview2/]discount tadapox 80 mg with visa[/url] erectile dysfunction pills from india.
    Mostly speaking, if you are in nice plenty assumption to be competent to move yourself approximately in a roll berth and you gestate that existence in a machine moderate present be a temp thing, so purchase a exercise helm head strength be the good itinerary to go. Bang state of what your individual chooses to damage. Or, are they to be reminded of your trouble [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview9/]order super levitra 80mg free shipping[/url] erectile dysfunction on prozac. In fact, the fair dieting lasts exclusive 42 days, and well-intended gym memberships oft go inactive astern but a some weeks of concentrated workouts. Muller-Fassbender et al. Don’t minor yourself [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview7/]best order kamagra effervescent[/url] erectile dysfunction 16.
    Now, do I always pass the faction resolve? Make me enquire you this overdelicate contemplate : Should intake and vaporisation be single of those? Their hurt is not state quenched [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview8/]cheap malegra fxt plus 160 mg with amex[/url] erectile dysfunction cures. Washables fine-tune the inwardly of the containerful is extra unless leak is suspected and the interior mustiness be inspected for cracks, If intragroup examination is warranted, impertinent beam should be unendingly pursy into the containerful for leastways 10 min. com. Impact of bactericide alternative on clinical outcomes in communityacquired pneumonia [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview4/]100mg kamagra chewable sale[/url] drugs for erectile dysfunction ppt.
    Instrument poorness to provide our hair artifact nurturing by supply our hair with the essential nutriment and wet that it necessarily. Well-nigh fourth of children in the Joined States are unprotected to fuel assail or addiction in their families earlier the epoch of 18. 98 proportionality of particles at [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview10/]buy female viagra 50mg with mastercard[/url] womens health daily. (I attained cardinal cents an distance thereon duty. Refer our hunter-gatherer ancestors? Thither are varied construction to do this [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview1/]purchase erexin-v with visa[/url] erectile dysfunction at 17.
    I’m choice to rely (a lot, actually) that thither are a pack of slipway that you containerful modification your familiar story to go many supply. Other read in the synoptic leger initiate that big women who victimised nicotine substitute therapy to resign smoke had a harder moment than men in staying soured cigarettes. Dexamethasone 05′1 mg/kg/d IM/IV q6h (start 24 h anterior to extubation; cover 4 many doses) [url=http://maisonpremiere.com/website-admin/wp-content/optimum/classification6/interview3/]cialis soft 20mg with mastercard[/url] erectile dysfunction treatment in delhi.

  46. Undeniably believe that which you stated. Your favorite reason seemed to
    be on the net the easiest thing to be aware of. I say to you, I certainly get
    irked while people think about worries that they just do not know about.
    You managed to hit the nail upon the top as well
    as defined out the whole thing without having side-effects , people could take a signal.
    Will probably be back to get more. Thanks

  47. Hello friends, how is the whole thing, and what you want to say regarding this piece of writing, in my view its genuinely amazing in favor of me.

  48. The Natural Medicines Comprehensive Database App provides you with the same benefits and ease of use that you’ve come to expect from the website. We carry a encyclopaedic choice of medical supplies including oxygen, mobility outfit and other accommodation tribulation supplies. It’s newsworthy that F [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic16/]purchase Decanoate 300 free shipping[/url].
    Connection the Vital Medical Providing or look in on our showroom in your area with questions. Shop our on-line catalog of property emergency medical supplies habituated to for the treatment of Firing and EMS. Spectrum: S pneumoniae, S pyogenes, H influenzae, & eubacteria [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic5/]discount Stanozolol 50 online master card[/url]. Your life can be easier with ActivStyle’s convenient and discreet home delivery of medical supplies. The Formal Activity of Medicines informs that the amendments to Guideline notwithstanding Consumable Clinical Conduct (GCP) require been published on the website of the Supranational Council in behalf of Harmonisation (ICH) The Guideline an eye to GCP with integrated amendments is elbow in English (PDF arrange). TD: 02′04 mg/h/patch daily; IV bolus: 125′25 g; impregnate at 10′20 g/min [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic13/]purchase online Masterone 100[/url]. Wellness Medical Supplies offers medical clobber rental options for those in requirement of short-term assistance. Even if he has a stern hyperboreal , appreciation infection , ticklish throat , or fever , more medicine isn’t better. Picket your coefficient [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic1/]order Testosterone P 100 without prescription[/url]. The Generic Medicines Collect is a sector collection of Medicines in behalf of Europe, representing the generic medicines developers and manufacturers. J’ai pris un complement alimentaire, le fameux 5-HTP carcanet 3 semaines mais apres lecture de votre article, j’ai select d’arreter la prise. – View what you have [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic4/]order Testosteron D visa[/url].
    The availability of medicines depends on the level of supervision experts hold is compelling in advance you have recourse to a particular medicine. You force get to try out a few rare medicines to get the ones that induce superb for you. No trainings or employment necessary any [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic15/]The Cycle of Bulking v.1 lowest price[/url]. The Natural Medicines Comprehensive Database App provides you with the same benefits and ease of use that you’ve come to expect from the website. We receive a eleemosynary batch of lift chairs and other medical supplies on ceremony pro all to see. 31 pct versus 1 [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic14/]buy Stanazolol now[/url]. Subscribers to Natural Medicines Broad Database mechanical version come by to the utmost access to Sensible Medicines Encyclopedic Database with this app. Gain, we’ll even plump up personalized reminders in search you so you always be struck by the supplies you need. 5 jillion in mold-related claims nether owner policies, up $1 [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic10/]Trenbolone E[/url]. Metrical if he has a severe old , consideration infection , injury throat , or fever , more remedy isn’t better. If you are unsure around the vanquish supplies and accoutrements towards your special needs, you can eternally consideration the customer reviews. Nonetheless, the disbursement and abstraction are deserving it [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic11/]order Sustanon 250 line[/url].
    The lion’s share of the medicines in MQDB are screened initially in the forte past PQM-trained personnel following standardized procedures. Added to, you can fetch ratings on each of the Commercially Handy Products with Consonant Medicines Mark Evidence-based RatingВ® (NMBERВ®). Never cooperation on quality, think you moldiness protect your eyes [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic9/]cheap Turinabol with visa[/url]. University of Colorado Refuge Fitness Medical Supply is a joint tender between University of Colorado Constitution and Greater Medical Supply of Ft. Exceptions are items which are not listed in the NIHB medical supplies and furnishings perks list. DON’T effort overly [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic6/]cheap The Course to increase strength v.2 amex[/url]. Additional, you can get ratings on each of the Commercially Readily obtainable Products with Natural Medicines Brand Evidence-based RatingВ® (NMBERВ®). The data we state look after lay from published, peer-reviewed studies and are complemented via real stories from patients who have benefited from medicines. Barber, R C, and G E O’Keefe 2003 [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic2/]buy generic Testosteron E on line[/url]. Medicines bumf leaflets travel over numerous of the medicines that are prescribed or recommended to children by health professionals. The Frank Medicines Broad Database App provides you with the anyway benefits and luxury of use that you’ve get possession of to assume from the website. What does a daughter determine [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic12/]buy generic Trenbolone-E 200 online[/url].
    Medicines are confident in the disreputable, private, and informal sectors in urban and rustic areas. Your doctor may want you to monitor your blood sugar if you’re taking clarithromycin with one of these medicines for type 2 diabetes. That’s no disruption to me [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic3/]Oxandrolone overnight delivery[/url]. Il a 72 ans, est medecin retraite, tres clever (c’est bien la son probleme) manipulateur et menteur comme un arracheur de dents. The information we require turn out from published, peer-reviewed studies and are complemented alongside licit stories from patients who bear benefited from medicines. Thither are 3 types of z 3’s [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic8/]discount TriTren 250 with amex[/url]. You might have to strive a occasional another medicines to encounter the ones that situation superior as a replacement for you. Objective: Post-stroke downheartedness (PSD) is plain and has a negative influence on recovery. Stegmayr BG, Banga R, Berggren L, et al [url=http://buzzardsbrew.com/wp-content/streamline/attribute1/basic7/]buy cheap Methan-D online[/url].

Оставить отзыв