Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Sergey

Страницы: [1]
1
В большей мере о WPF / Template, Style, Trigger. Sample #1
« : Январь 21, 2013, 12:58:06 am »
Сегодня мы рассмотрим пример, в котором используются стиль, шаблон и триггер (Template, Style and Trigger). Перечисленные инструменты, в большей степени характерные для XAML, позволяют самым удивительным образом настраивать интерфейс пользователя.

Итак, задача будет состоять в том, чтобы настроить классический ToggleButton (кнопка с залипанием). Именно, в зависимости от того, нажата ли кнопка или нет, показывать соответствующий значок.
Инструментарий: Expression Blend, Expression Design, Visual studio.
Expression Design - великолепный графический инструмент для подготовки векторной графики и изображений для последующего использования в проектировании UI - интерфейса пользователя. Самое привлекательное состоит в том, что формат сохранения векторной графики может быть в том числе и XAML с контейнером Canvas и (или) Viewbox. Сочетание последних контейнеров предназначено именно для отображения графики. Если чуть глубже, то в этих контейнерах реализовано адаптированное расположение графических элементов, основанное на их действительных размерах.

Результат представлен рисунком ниже:


Итак, файл кода остается совершенно пустым - все реализуется в XAML. Код экземпляра, унаследованного от Window имеет вид
Код: XML
  1. <Window x:Class="MainWindow"
  2.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.    Title="MainWindow" Height="156" Width="291">
  6.         <Window.Resources>
  7.                 <ResourceDictionary>
  8.                         <ResourceDictionary.MergedDictionaries>
  9.                                 <ResourceDictionary Source="TSResources.xaml"/>
  10.                         </ResourceDictionary.MergedDictionaries>
  11.                 </ResourceDictionary>
  12.         </Window.Resources>
  13.     <Grid>
  14.         <Grid.ColumnDefinitions>
  15.             <ColumnDefinition/>
  16.         </Grid.ColumnDefinitions>
  17.         <Grid.RowDefinitions>
  18.             <RowDefinition Height="Auto"/>
  19.             <RowDefinition/>
  20.         </Grid.RowDefinitions>
  21.         <Grid.Background>
  22.             <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  23.                 <GradientStop Color="Black" Offset="0"/>
  24.                 <GradientStop Color="White" Offset="1"/>
  25.             </LinearGradientBrush>
  26.         </Grid.Background>
  27.         <DockPanel
  28.                   LastChildFill="False"
  29.                   Grid.RowSpan="1"
  30.                   Grid.Row="0"
  31.                   Grid.Column="0">
  32.             <ToggleButton MinWidth="50" MinHeight="30"
  33.                         Style="{StaticResource OpenCloseStyle}">
  34.             </ToggleButton>
  35.             <ToggleButton MinWidth="50" MinHeight="30"
  36.                 Style="{StaticResource OpenCloseStyle}"/>
  37.             <ToggleButton MinWidth="50" MinHeight="30"
  38.                 Style="{StaticResource OpenCloseStyle}"/>
  39.         </DockPanel>
  40.     </Grid>
  41. </Window>
  42.  
Ясно, что вся "основная" работа по настройке вида кнопки происходит в словаре ресурсов - в файле TSResources.xaml.
Его код представлен ниже:
Код: XML
  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">  
  3.         <DataTemplate x:Key="ArrowToOpen">
  4.         <Viewbox
  5.                         Height="20" Width="20">
  6.             <Canvas Width="122.717" Height="82.377" Clip="F1 M 0,0L 122.717,0L 122.717,82.377L 0,82.377L 0,0">
  7.                 <Path Width="122.717" Height="82.377" Stretch="Fill" StrokeThickness="2.88" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 61.172,80.937L 41.5788,61.3659L 2.90447,22.7035C 0.951843,20.7509 0.951843,17.585 2.90447,15.6324L 15.6324,2.9045C 17.585,0.951859 20.7508,0.951859 22.7035,2.9045L 61.2962,41.5235L 100.014,2.9045C 101.966,0.951859 105.132,0.951859 107.085,2.9045L 119.813,15.6324C 121.765,17.585 121.765,20.7508 119.813,22.7034L 81.2563,61.26L 61.172,80.937 Z "/>
  8.             </Canvas>
  9.         </Viewbox>
  10.     </DataTemplate>
  11.     <DataTemplate x:Key="ArrowToClose">
  12.         <Viewbox
  13.                         Height="20" Width="20">
  14.             <Canvas Width="82.377" Height="122.717" Clip="F1 M 0,0L 82.377,0L 82.377,122.717L 0,122.717L 0,0">
  15.                 <Path Width="82.377" Height="122.717" Stretch="Fill" StrokeThickness="2.88" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 80.937,61.5453L 61.3658,81.1385L 22.7035,119.813C 20.7509,121.765 17.585,121.765 15.6324,119.813L 2.90448,107.085C 0.951843,105.132 0.951843,101.966 2.90448,100.014L 41.5234,61.421L 2.90442,22.7034C 0.951782,20.7507 0.951782,17.585 2.90442,15.6323L 15.6323,2.90442C 17.585,0.951782 20.7508,0.951782 22.7034,2.90442L 61.2599,41.4609L 80.937,61.5453 Z "/>
  16.             </Canvas>
  17.         </Viewbox>
  18.     </DataTemplate>
  19.         <Style x:Key="OpenCloseStyle" TargetType="ToggleButton">
  20.                 <Style.Triggers>
  21.                         <Trigger Property="IsChecked" Value="False">
  22.                                 <Setter Property="ContentTemplate" Value="{StaticResource ArrowToOpen}"></Setter>
  23.                         </Trigger>
  24.                         <Trigger Property="IsChecked" Value="True">
  25.                                 <Setter Property="ContentTemplate" Value="{StaticResource ArrowToClose}"></Setter>
  26.                         </Trigger>
  27.                 </Style.Triggers>
  28.         </Style>
  29. </ResourceDictionary>
  30.  
Обратим внимание на два обстоятельства:
1. В Visual Studio строка ссылки на файл ресурсов Source="TSResources.xaml" воспринимается ошибкой. Мы выбрали Expression Blend - здесь есть удивительная особенность. После создания файла ресурсов перейдя во вкладку ресурсов справа, "залинковать" ресурс, например, к окну приложения. В частности, следующая часть кода вставлена автоматически Expression Blend.



Затронутый вопрос указания ссылки на файл в XAML, да и шире, вопрос подключения, скажем, внешнего класса (класса из проекта библиотеки в другой сборке) в область видимости файла XAML - довольно каверзная вещь. Например, опытным путем замечено, что файл XAML может не видеть класс "сторонней" библиотеки, хотя внешне все сделано правильно. Часто оказывается достаточным просто перекомпилировать решение при выставленной опции Any CPU (Build -> Configuration Manager). Удивительно, но факт довольно неприятный, особенно когда часами тщетно пытаешься найти причину ошибки.
Код: XML
  1.         <Window.Resources>
  2.                 <ResourceDictionary>
  3.                         <ResourceDictionary.MergedDictionaries>
  4.                                 <ResourceDictionary Source="TSResources.xaml"/>
  5.                         </ResourceDictionary.MergedDictionaries>
  6.                 </ResourceDictionary>
  7.         </Window.Resources>
  8.  
2. Строки вида "F1 M 0,0L 82.377,0L 82.377,122.717L 0,122.717L 0,0" указывают на язык (скрипт) плоской графики, применяемый дополнительно внутри XAMl. Ничто не мешает им пользоваться и непосредственно в коде.


2
В большей мере о WPF / Data Binding. Start #1
« : Декабрь 24, 2012, 03:27:15 pm »
Что получим в итоге:


Выдающихся особенностей в WPF много. И одна из них, без сомнения, Data Binding - связывание данных. Применяться оно может повсюду, в самых разнообразных сценариях. Но, наверное, самая "активная" область применения этой технологии - работа с коллекциями. Иначе, это - область использования как ItemsControl -
Цитировать
Represents a control that can be used to present a collection of items,
так и сложных элементов управления, содержащих свойство ItemsSource или Items. Вот, к примеру, иерархия наследования ListBox и далее, ListView:
System.Object
   System.Windows.Threading.DispatcherObject
     System.Windows.DependencyObject
       System.Windows.Media.Visual
         System.Windows.UIElement
           System.Windows.FrameworkElement
             System.Windows.Controls.Control
               System.Windows.Controls.ItemsControl
                 System.Windows.Controls.Primitives.Selector
                   System.Windows.Controls.ListBox
                     System.Windows.Controls.ListView


Простой пример связывания данных.
Создадим приложение WPF. Разметка окна следующая:
Код: XML
  1. <Window x:Class="MainWindow"
  2.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.    Title="MainWindow" Height="350" Width="525">
  5.     <Grid>
  6.         <ListBox x:Name="ListBoxProgrammers"
  7.                 ItemsSource="{Binding}">
  8.             <ListBox.ItemTemplate>
  9.                 <DataTemplate>
  10.                     <TextBlock Text="{Binding Path=PC_ProgrammersArea}"/>
  11.                 </DataTemplate>
  12.             </ListBox.ItemTemplate>
  13.         </ListBox>
  14.     </Grid>
  15. </Window>
  16.  

Код главного окна приложения:
Код: Visual Basic
  1. Imports ClassLibrary
  2.  
  3. Class MainWindow
  4.  
  5.     Public Sub New()
  6.  
  7.         ' This call is required by the designer.
  8.        InitializeComponent()
  9.  
  10.         ' Add any initialization after the InitializeComponent() call.
  11.        Dim Programmers As New ProgrammersManagementClass()
  12.         Me.ListBoxProgrammers.DataContext = Programmers.PMC_ProgrammersCollection
  13.     End Sub
  14. End Class
  15.  

Профиль (Enum - перечисление) программиста:
Код: vb.net
  1. Public Module Helper
  2.  
  3.     Public Enum Field
  4.         cpp
  5.         vbnet
  6.         csharp
  7.         php
  8.         maxima
  9.         mathematica
  10.         java
  11.         pascal
  12.     End Enum
  13.  
  14. End Module
  15.  

Код класса ProgrammerClass:
Код: vb.net
  1. Public Class ProgrammerClass
  2.     Public Property PC_ProgrammersName As String
  3.     Public Property PC_ProgrammersArea As Helper.Field
  4.  
  5.     Public Sub New(Name As String, _
  6.                    Area As Helper.Field)
  7.         Me.PC_ProgrammersName = Name
  8.         Me.PC_ProgrammersArea = Area
  9.     End Sub
  10. End Class
  11.  

И, наконец, код класса ProgrammersManagementClass, поставляющего коллекцию. Конечно, в реальности, в качестве поставщика коллекции выступает база данных, XML описание и др.
Код: vb.net
  1. Imports System.Collections.ObjectModel
  2.  
  3. Public Class ProgrammersManagementClass
  4.     Public Property PMC_ProgrammersCollection As ObservableCollection(Of ProgrammerClass)
  5.     Private RandomValue As Random
  6.  
  7.     Public Sub New()
  8.         Me.PMC_ProgrammersCollection = New ObservableCollection(Of ProgrammerClass)()
  9.         Me.RandomValue = New Random()
  10.         For i As Integer = 0 To 10
  11.             Dim NewFormedProgrammer As New ProgrammerClass("Name" & i.ToString, RandomValue.Next(7))
  12.             Me.PMC_ProgrammersCollection.Add(NewFormedProgrammer)
  13.         Next
  14.     End Sub
  15. End Class
  16.  

3
Если Вы интересуетесь установкой и использованием втечение некоторого времени программ Timo Structural и(или) Mechanics of Materials Toolbox for Maple, пришлите свой запрос в совершенно свободной форме на адрес support@orlovsoft.com с указанием электронного адреса, имени, рода деятельности и примерного периода использования программы. Указанная Вами информация необходима нам для генерирования файлов лицензии.
Триал период использования уточняется индивидуально. Общие ориентиры таковы:
  • Ориентировочный период использования для инженеров: две недели.
  • Ориентировочный период использования для студентов: одна неделя.

4
Что такое Timo Structural / Что такое Timo Structural
« : Октябрь 07, 2012, 09:50:12 pm »
Timo Structural - программа для Windows, выполняющая расчеты каркасных сооружений, то есть стержневых конструкций.
Возможности:
  • Расчет всех внутренних силовых факторов, таких как внутренние продольные силы, поперечные силы, внутренние изгибающие моменты и момент кручения;
  • Расчет реакций - сосредоточенных сил и моментов;
  • Расчет перемещений в конструкции.

Особенности:
  • Главной концептуальной особенностью программы является т.н. показатель юсабилити, то есть легкость ее освоения. Так, монтаж конструкции осуществляется простым нажатием кнопок присоединения одного элемента - стержня к другому. Довольно серьезные сооружения моделируются втечение нескольких минут, а порог вхождения (время от первого старта до профессионального использования) измеряется 15-20 минутами. Такая технология реализована в виде интерактивного 3D редактора создания конструкций.
  • Timo Structural текущей версии не включает разного рода библиотек профилей, полагаясь на введеную пользователем информацию о характеристиках сечения, таких как осевые моменты инерции, модуль Юнга, модуль сдвига, площадь поперечного сечения, а также моменты сопротивления сечений для расчета основных напряжений. В этом преимущество программы, с одной стороны, и ее недостаток, с другой.
  • Решатель системы построен на основе системы компьютерной алгебры Wolfram Mathematica, что обеспечивает высочайшую надежность вычислений и предполагает использование самых эффективных алгоритмов.

Если в Вашем браузере установлен плагин Silverlight, то Вы можете взглянуть на скриншоты программы здесь
Скриншоты Silverlight
Если Вы не используете Silverlight, то Вы можете взглянуть на скриншоты программы здесь
Скриншоты
 

5
Администратор / Что и зачем?
« : Октябрь 07, 2012, 08:48:17 pm »
Добро пожаловать на форум русскоязычной поддержки продуктов Orlovsoft.

Текущие версии продуктов:
  • Timo Structural 1.01
  • Mechanics of Materials Toolbox for Maple v2.06
  • Timik 2.0 Online Helper. Beta
  • Timik Mobile

В качестве дополнения работает ветка для энтузиастов программирования на платформе WPF.

Важно. Сообщения, не соответствующие прямо или косвенно тематике сообщества, будут удаляться субъективным решением администраторов/модераторов.
Спасибо и еще раз Добро пожаловать!

Страницы: [1]