Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
29
Добавлен:
19.04.2015
Размер:
578.05 Кб
Скачать

6.4.1.Проектирование графического интерфейсного окна

API-интерфейс WPF поддерживает возможность программной загрузки, разбора и сохранения XAML-описаний. Это может быть полезно во многих ситуациях. Например, предположим, что есть пять разных файлов XAML, описывающих внешний вид и поведение типа Window. До тех пор, пока имена каждого элемента (и всех необходимых обработчиков событий) идентичны внутри каждого файла, можно динамически менять "обложки" окна (возможно, на основе аргумента, передаваемого приложению при запуске).

Взаимодействие с XAML во время выполнения вращается вокруг типов XamlReaderиXamlWriter— оба они определены в пространстве имен System.Windows.Markup.

Ниже представлен XAMLкод, с помощью которого генерируется основная интерфейсная область модуля рисования:

<Window x:Class="DrawTools.MainWindow"

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

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

xmlns:effects="clr-namespace:System.Windows.Media.Effects;assembly=presentationcore"

xmlns:lib="clr-namespace:DrawToolsLib;assembly=DrawToolsLib"

xmlns:util="clr-namespace:Utilities;assembly=Utilities"

xmlns:libconvert="clr-namespace:Petzold.Converters;assembly=Utilities"

MinHeight="400" MinWidth="500" Width="985" Height="618" Topmost="False" SizeToContent="Manual">

<Window.CommandBindings>

<CommandBinding Command="ApplicationCommands.New" Executed="FileNewCommand" />

<CommandBinding Command="ApplicationCommands.Print" Executed="FilePrintCommand" />

<CommandBinding Command="ApplicationCommands.Close" Executed="FileCloseCommand" />

<CommandBinding Command="ApplicationCommands.Save" Executed="FileSaveCommand" />

<CommandBinding Command="ApplicationCommands.SaveAs" Executed="FileSaveAsCommand" />

<CommandBinding Command="ApplicationCommands.Open" Executed="FileOpenCommand" />

<CommandBinding Command="ApplicationCommands.Undo" Executed="EditUndoCommand" />

<CommandBinding Command="ApplicationCommands.Redo" Executed="EditRedoCommand" />

<CommandBinding Command="ApplicationCommands.Help" Executed="HelpCommand" />

</Window.CommandBindings>

<Window.Resources>

<lib:ToolTypeConverter x:Key="convToolType"/>

<libconvert:DoubleToDecimalConverter x:Key="convDoubleDecimal" />

<util:FontSizeConverter x:Key="convFont" />

<effects:BlurBitmapEffect x:Key="bmpEffect" KernelType="Box" Radius="2"/>

<util:ColorToBrushConverter x:Key="convColorToBrush"/>

<Style x:Key="toolbarImageStyle" TargetType="Image">

<Style.Triggers>

<DataTrigger Value="False"

Binding="{Binding

Path=IsEnabled,

RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}, AncestorLevel=1}}">

<Setter Property="Image.BitmapEffect" Value="{StaticResource bmpEffect}" />

</DataTrigger>

</Style.Triggers>

</Style>

<Style x:Key="fontTextBlockStyle" TargetType="TextBlock">

<Setter Property="FontFamily" Value="{Binding ElementName=drawingCanvas, Path=TextFontFamilyName, Mode=OneWay}"/>

<Setter Property="FontStyle" Value="{Binding ElementName=drawingCanvas, Path=TextFontStyle, Mode=OneWay}"/>

<Setter Property="FontWeight" Value="{Binding ElementName=drawingCanvas, Path=TextFontWeight, Mode=OneWay}"/>

<Setter Property="FontStretch" Value="{Binding ElementName=drawingCanvas, Path=TextFontStretch, Mode=OneWay}"/>

</Style>

</Window.Resources>

<DockPanel LastChildFill="True">

<Menu DockPanel.Dock="Top">

<MenuItem Header="Файл">

<MenuItem Header="New" Command="ApplicationCommands.New">

<MenuItem.Icon>

<Image Source="Images/NewDocumentHS.png" />

</MenuItem.Icon>

</MenuItem>

<MenuItem Header="Открыть" Command="ApplicationCommands.Open">

<MenuItem.Icon>

<Image Source="Images/openHS.png" />

</MenuItem.Icon>

</MenuItem>

<MenuItem Header="Сохранить" Command="ApplicationCommands.Save">

<MenuItem.Icon>

<Image Source="Images/saveHS.png" />

</MenuItem.Icon>

</MenuItem>

<MenuItem Header="Сохранить как..." Command="ApplicationCommands.SaveAs">

<MenuItem.Icon>

<Image Source="Images/Transparent.png" />

</MenuItem.Icon>

</MenuItem>

<Separator/>

<MenuItem Header="Печать" Command="ApplicationCommands.Print">

<MenuItem.Icon>

<Image Source="Images/PrintHS.png" />

</MenuItem.Icon>

</MenuItem>

<Separator/>

<MenuItem Name="menuFileRecentFiles" Header="Ранее открытые файлы">

<MenuItem.Icon>

<Image Source="Images/Transparent.png" />

</MenuItem.Icon>

</MenuItem>

<Separator/>

<MenuItem Header="Выход" Command="ApplicationCommands.Close">

<MenuItem.Icon>

<Image Source="Images/Transparent.png" />

</MenuItem.Icon>

</MenuItem>

</MenuItem>

<MenuItem Header="Правка" Name="menuEdit">

<MenuItem Header="Выделить все" Name="menuEditSelectAll"/>

<MenuItem Header="Убрать выделение" Name="menuEditUnselectAll"/>

<MenuItem Header="Удалить" Name="menuEditDelete"/>

<MenuItem Header="Удалить все" Name="menuEditDeleteAll"/>

<Separator/>

<MenuItem Header="Перейти к следующему" Name="menuEditMoveToFront"/>

<MenuItem Header="Перейти к предыдущему" Name="menuEditMoveToBack"/>

<Separator/>

<MenuItem Header="Назад" Name="menuEditUndo" Command="ApplicationCommands.Undo"/>

<MenuItem Header="Вперед" Name="menuEditRedo" Command="ApplicationCommands.Redo"/>

<MenuItem Header="Свойства" Name="menuEditSetProperties"/>

</MenuItem>

<MenuItem Header="Отрисовка" Name="menuTools">

<MenuItem Header="Точка" Name="menuToolsPointer" Tag="Pointer"/>

<MenuItem Header="Прямоугольник" Name="menuToolsRectangle" Tag="Rectangle"/>

<MenuItem Header="Эллипс" Name="menuToolsEllipse" Tag="Ellipse"/>

<MenuItem Header="Линия" Name="menuToolsLine" Tag="Line"/>

<MenuItem Header="Карандаш" Name="menuToolsPencil" Tag="PolyLine"/>

<MenuItem Header="Текст" Name="menuToolsText" Tag="Text"/>

</MenuItem>

<MenuItem Header="Справка">

<MenuItem Header="О программе" Command="ApplicationCommands.Help">

<MenuItem.Icon>

<Image Source="Images/About.bmp" />

</MenuItem.Icon>

</MenuItem>

</MenuItem>

</Menu>

<ToolBarTray DockPanel.Dock="Top">

<ToolBar >

<Button Command="ApplicationCommands.New" ToolTip="Новый">

<Image Source="Images/NewDocumentHS.png" Height="17" Width="17" />

</Button>

<Button Command="ApplicationCommands.Open" ToolTip="Открыть">

<Image Source="Images/openHS.png" Height="17" Width="17" />

</Button>

<Button Command="ApplicationCommands.Save" ToolTip="Сохранить">

<Image Source="Images/saveHS.png" Height="17" Width="17" />

</Button>

<Button Name="buttonOpenDialog" ToolTip="Начать расчет">

<Image Source="Images/ZN.png" Height="17" Width="17" />

</Button>

<Separator/>

<ToggleButton Name="buttonToolPointer" ToolTip="Точка" Tag="Pointer"

IsChecked="{Binding ElementName=drawingCanvas, Path=Tool, Mode=OneWay,

Converter={StaticResource convToolType}, ConverterParameter=Pointer}">

<Image Source="Images/PointerHS.png"/>

</ToggleButton>

<ToggleButton Name="buttonToolRectangle" ToolTip="Прямоугольник" Tag="Rectangle"

IsChecked="{Binding ElementName=drawingCanvas, Path=Tool, Mode=OneWay,

Converter={StaticResource convToolType}, ConverterParameter=Rectangle}">

<Image Source="Images/rectangle.png"/>

</ToggleButton>

<ToggleButton Name="buttonToolEllipse" ToolTip="Эллипс" Tag="Ellipse"

IsChecked="{Binding ElementName=drawingCanvas, Path=Tool, Mode=OneWay,

Converter={StaticResource convToolType}, ConverterParameter=Ellipse}">

<Image Source="Images/ellipse.png"/>

</ToggleButton>

<ToggleButton Name="buttonToolLine" ToolTip="Линия" Tag="Line"

IsChecked="{Binding ElementName=drawingCanvas, Path=Tool, Mode=OneWay,

Converter={StaticResource convToolType}, ConverterParameter=Line}">

<Image Source="Images/line.png"/>

</ToggleButton>

<ToggleButton Name="buttonToolPencil" ToolTip="Карандаш" Tag="PolyLine"

IsChecked="{Binding ElementName=drawingCanvas, Path=Tool, Mode=OneWay,

Converter={StaticResource convToolType}, ConverterParameter=PolyLine}">

<Image Source="Images/pencil.png"/>

</ToggleButton>

<ToggleButton Name="buttonToolText" ToolTip="Текст" Tag="Text"

IsChecked="{Binding ElementName=drawingCanvas, Path=Tool, Mode=OneWay,

Converter={StaticResource convToolType}, ConverterParameter=Text}">

<Image Source="Images/Text.png"/>

</ToggleButton>

<Separator/>

<Button Command="ApplicationCommands.Undo" ToolTip="Назад"

IsEnabled="{Binding ElementName=drawingCanvas, Path=CanUndo, Mode=OneWay}">

<Image Source="Images/Edit_UndoHS.png"

Style="{StaticResource toolbarImageStyle}"/>

</Button>

<Button Command="ApplicationCommands.Redo" ToolTip="Вперед"

IsEnabled="{Binding ElementName=drawingCanvas, Path=CanRedo, Mode=OneWay}">

<Image Source="Images/Edit_RedoHS.png"

Style="{StaticResource toolbarImageStyle}"/>

</Button>

<Separator/>

<Button Name="buttonPropertiesFont" ToolTip="Шрифт">

<StackPanel Orientation="Horizontal">

<TextBlock Style="{StaticResource fontTextBlockStyle}"

Text="{Binding ElementName=drawingCanvas, Path=TextFontFamilyName, Mode=OneWay}" />

<TextBlock Style="{StaticResource fontTextBlockStyle}"

Text=" (" />

<TextBlock Style="{StaticResource fontTextBlockStyle}"

Text="{Binding ElementName=drawingCanvas, Path=TextFontSize, Mode=OneWay,

Converter={StaticResource convFont}}" />

<TextBlock Style="{StaticResource fontTextBlockStyle}"

Text=")" />

</StackPanel>

</Button>

<Separator/>

<TextBlock Text=" " Margin="5,5,3,5" ToolTip="Цвет"

Background="{Binding ElementName=drawingCanvas, Path=ObjectColor, Mode=OneWay,

Converter={StaticResource convColorToBrush}}"/>

<Button Name="buttonPropertiesColor" ToolTip="Цвет">

<TextBlock>

<Bold>Цвет линии</Bold>

</TextBlock>

</Button>

<Separator/>

<TextBlock VerticalAlignment="Center" Margin="5,0,2,0" ToolTip="Толщина линии">

Толщина линии

</TextBlock>

<ComboBox Name="comboPropertiesLineWidth" ToolTip="Толщина" MinWidth="40"

IsEditable="False"

Margin="5,0,0,0"/>

<Separator/>

<Button Command="ApplicationCommands.Help" ToolTip="О программе">

<Image Source="Images/About.bmp"/>

</Button>

</ToolBar>

</ToolBarTray>

<lib:DrawingCanvas x:Name="drawingCanvas" Background="White" Height="Auto" Width="Auto" />

</DockPanel>

</Window>

90

Соседние файлы в папке Жукова записка