Для изменения размера нажмите или перетащите
Пользовательский интерфейс (GUI)

Данный топик предназначен для трейдеров, которые разрабатывают графические торговые программы с помощью S#, но недостаточно знакомы с азами программирования графического интерфейса под .NET.

В .NET существует специальная технология для построения графического интерфейса – WPF (до этого была технология WinForms, которая значительно уступает по графическим возможностям). В этой технологии для создания графических элементов используется специальный декларативынй язык XAML.

Основное ограничение визуального API под Windows состоит в том, что нельзя обращаться из другого потока к элементам окна. Это связанно с ограничениями архитектуры Windows (подробнее описано здесь https://msdn.microsoft.com/ru-ru/library/ms741870.aspx). Реализации шлюза IConnector в целях повышения производительности работают в многопоточном режиме. Поэтому, подписываясь на событие, например, IConnectorNewSecurities, нельзя напрямую выводить полученные данные в окно пользователя. Для этого нужно провести операцию синхронизации при помощи специального объекта Dispatcher, который управляет очередью рабочих элементов потока.

Вот простой пример, как это делается:

C#
// обязательно нужно вызвать метод BeginInvoke,
// и уже в его обработчике можно обратиться к элементу окна 'Security' (это выпадающий список)
_trader.NewSecurities += securities => this.Dispatcher.BeginInvoke((Action)(() => this.Security.ItemsSource = _trader.Securities));

S# уже содержит специальные методы, которые скрывают использование Dispatcher и упрощают написание кода:

C#
// обязательно нужно вызвать метод GuiSync, прежде чем обратиться к элементу окна 'Security' (это выпадающий список)
_trader.NewSecurities += securities => this.GuiSync(() => this.Security.ItemsSource = _trader.Securities);

Графические компоненты S#

В состав S# входит большое количество собственных графических компонент, которые размещены в пространствах имен StockSharp.Xaml, StockSharp.Xaml.Charting и StockSharp.Xaml.Diagram. Некоторые специфические компоненты находятся в пространствах имен коннекторов, как например, комбинированный список SmartComAddressComboBox для выбора адреса сервера SmartCOM.

S# имеет различные контролы для:

  • поиска и выбора данных (инструментов, портфелей, адресов);

  • создания заявок;

  • отображения биржевой и другой информации (сделки, заявки, транзакции, стаканы, логи и т.д.);

  • построения графиков.

Для доступа к графическим контролам S# в коде XAML необходимо определить псевдонимы для соотвествующих пространств имен и использовать эти псевдонимы в коде XAML. Как это сделать показано в следующем примере:

XAML
<Window x:Class="SampleSmartSMA.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:loc="clr-namespace:StockSharp.Localization;assembly=StockSharp.Localization"
        xmlns:sx="clr-namespace:StockSharp.Xaml;assembly=StockSharp.Xaml"
        xmlns:ss="clr-namespace:StockSharp.SmartCom.Xaml;assembly=StockSharp.SmartCom"
        xmlns:charting="http://schemas.stocksharp.com/xaml"
        Title="{x:Static loc:LocalizedStrings.XamlStr570}" Height="700" Width="900">

    <Grid>
   </Grid>
</Window>