Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Пространство имён PercentageConverter.csСодержание книги
Поиск на нашем сайте using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data; using System.Windows.Markup;
namespace CN2.UC.Converters { public class PercentageConverter: MarkupExtension, IValueConverter { private static PercentageConverter _instance;
public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo) { return System.Convert.ToDouble(value)*System.Convert.ToDouble(parameter); }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cultureInfo) { throw new NotImplementedException (); }
public override object ProvideValue(IServiceProvider serviceProvider) { return _instance?? (_instance = new PercentageConverter()); } } } Пространство имён AttrinuteTypesView AttributeTypesDataGridItem.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls.Primitives; using System.Xml; using CN2.Core.DataStructures; using System.Xml.Serialization;
namespace CN2.UC.AttrinuteTypesView { public class AttributeTypesDataGridItem { private const char Separator = ';';
public bool IsUse { get; set; }
public string Name { get; set; }
public Types Type { get; set; }
public string Values { get; set; }
public AttributeTypesDataGridItem() { IsUse = true; }
public AttributeTypesDataGridItem(bool isUse, string name, Types type, string values) { IsUse = isUse; Name = name; Type = type; Values = values; }
public bool IsValid() { if (Name == null || Name.Equals(string.Empty) || Values == null || Values.Equals(string.Empty)) { return false; }
foreach (var stringValue in Values.Split(Separator)) { switch (Type) { case Types.Boolean: { bool boolValue; if (!Boolean.TryParse(stringValue, out boolValue)) { return false; } } break;
case Types.Integer: { int intValue; if (!Int32.TryParse(stringValue, out intValue)) { return false; } } break;
case Types.Float: { double floatValue; if (!Double.TryParse(stringValue, out floatValue)) { return false; } } break; } } return true; } } } AttributeTypesView.xaml <UserControl x:Class="CN2.UC.AttrinuteTypesView.AttributeTypesView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:CN2.UC.AttrinuteTypesView" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <UserControl.Resources> <Image x:Key="SaveImage" Source="../../Images/Save_16x.png"/> <Image x:Key="OpenImage" Source="../../Images/Open_16x.png"/> </UserControl.Resources> <Grid> <Menu x:Name="menu" Height="22" VerticalAlignment="Top"> <Button x:Name="buttonLoadAttrinuteTypes" Content="{StaticResource OpenImage}" Margin="0,2,0,0" Height="16" Width="20" Click="buttonLoadAttrinuteTypes_Click" ToolTip="Загрузить типы атрибутов из файла"/> <Button x:Name="buttonSaveAttrinuteTypes" Content="{StaticResource SaveImage}" Margin="0,2,0,0" Height="16" Width="20" Click="buttonSaveAttrinuteTypes_Click" ToolTip="Сохранить типы атрибутов в файл"/> </Menu> <DataGrid x:Name="dataGrid" Margin="0,22,0,0" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" CanUserResizeRows="False" RowHeight="24" HeadersVisibility="Column" MouseDown="dataGrid_MouseDown" CellEditEnding="dataGrid_CellEditEnding" GotFocus="dataGrid_GotFocus" CanUserSortColumns="False"/> </Grid> </UserControl> AttributeTypesView.xaml.sc using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; 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; using System.Xml; using System.Xml.Linq; using System.Xml.Serialization; using CN2.Core.DataStructures; using Microsoft.Win32;
namespace CN2.UC.AttrinuteTypesView { /// <summary> /// Interaction logic for AttributeTypesView.xaml /// </summary> public partial class AttributeTypesView: UserControl { private List<AttributeTypesDataGridItem> _items;
private CollectionView _itemsCV;
// get { return (from item in _items where item.IsUse && item.IsValid() select item).ToList().Count > 0; }
public AttributeTypesView() { InitializeComponent();
_items = new List<AttributeTypesDataGridItem>();
DataGridCheckBoxColumn isUseColumn = new DataGridCheckBoxColumn() { Header = "Использовать", Width = 30, Binding = new Binding("IsUse") { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged } }; dataGrid.Columns.Add(isUseColumn);
DataGridTextColumn nameColumn = new DataGridTextColumn() { Header = "Имя типа данных", Width = 100, Binding = new Binding("Name") { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged } }; dataGrid.Columns.Add(nameColumn);
DataGridComboBoxColumn typeColumn = new DataGridComboBoxColumn() { Header = "Тип данных значений", Width = 100, ItemsSource = Enum.GetValues(typeof (Types)).Cast<Types>(), SelectedItemBinding = new Binding("Type") { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged } }; dataGrid.Columns.Add(typeColumn);
DataGridTextColumn valuesColumn = new DataGridTextColumn() { Header = "Значения", Width = 300, Binding = new Binding("Values") {Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged} }; dataGrid.Columns.Add(valuesColumn);
dataGrid.ItemsSource = _items;
_itemsCV = (CollectionView) CollectionViewSource.GetDefaultView(dataGrid.Items); ((INotifyCollectionChanged) _itemsCV).CollectionChanged += OnItemsCVChanged; }
#region средства для сериализации и десериализации списка типов атрибутов
private void buttonLoadAttrinuteTypes_Click(object sender, RoutedEventArgs e) { try { OpenFileDialog ofd = new OpenFileDialog() { Filter = SerializationData.FileDialogFilter, Title = SerializationData.LoadAttributeTypesFileDialogTitle };
Nullable<bool> ofdResult = ofd.ShowDialog();
if (ofdResult == true) { XDocument attributeTypesXDocument = XDocument.Load(ofd.FileName); foreach (var attributeTypesXElement in attributeTypesXDocument.Elements()) { if (attributeTypesXElement.Name.ToString().Equals(SerializationData.AttributeTypesNode)) { foreach (var attributeTypeXElement in attributeTypesXElement.Elements()) { if (attributeTypeXElement.Name.ToString().Equals(SerializationData.AttributeTypeNode)) { AttributeTypesDataGridItem item = new AttributeTypesDataGridItem(); foreach (var attributeTypeXAttribute in attributeTypeXElement.Attributes()) { if (attributeTypeXAttribute.Name.ToString().Equals(SerializationData.IsUse)) { item.IsUse = Convert.ToBoolean(attributeTypeXAttribute.Value); } if (attributeTypeXAttribute.Name.ToString().Equals(SerializationData.AttributeTypeName)) { item.Name = attributeTypeXAttribute.Value; } if (attributeTypeXAttribute.Name.ToString().Equals(SerializationData.AttrinuteTypeType)) { switch (attributeTypeXAttribute.Value) { case "Boolean": { item.Type = Types.Boolean; } break;
case "Integer": { item.Type = Types.Integer; } break;
case "Float": { item.Type = Types.Float; } break;
case "String": { item.Type = Types.String; } break;
default: { throw new Exception(); } break; } } if (attributeTypeXAttribute.Name.ToString().Equals(SerializationData.AttributeTypeValues)) { item.Values += attributeTypeXAttribute.Value; } } _items.Add(item); if (!item.IsValid()) { // todo сделать получение строки по элементу } } } } }
dataGrid.Items.Refresh();
if (OnFileLoaded!= null) { OnFileLoaded(sender, "Типы тарибутов загружены из файла " + ofd.FileName + "."); } } } catch (Exception ex) { if (OnErrorOccured!= null) { OnErrorOccured(this, ex.Message); } } }
private void buttonSaveAttrinuteTypes_Click(object sender, RoutedEventArgs e) { try { SaveFileDialog sfd = new SaveFileDialog() { Title = SerializationData.SaveAttributeTypesFileDialogTitle, Filter = SerializationData.FileDialogFilter, FileName = "attribute types" };
Nullable<bool> sfdResult = sfd.ShowDialog();
if (sfdResult == true) { XElement attributeTypesXElement = new XElement(SerializationData.AttributeTypesNode); foreach (var attributeType in _items) { attributeTypesXElement.Add(new XElement(SerializationData.AttributeTypeNode, new XAttribute(SerializationData.IsUse, attributeType.IsUse), new XAttribute(SerializationData.AttributeTypeName, attributeType.Name), new XAttribute(SerializationData.AttrinuteTypeType, attributeType.Type), new XAttribute(SerializationData.AttributeTypeValues, attributeType.Values))); } new XDocument(attributeTypesXElement).Save(sfd.FileName);
if (OnFileSaved!= null) { OnFileSaved(sender, "Типы тарибутов сохранены в файл " + sfd.FileName + "."); } } } catch (Exception ex) { if (OnErrorOccured!= null) { OnErrorOccured(this, ex.Message); } } }
#endregion средства для сериализации и десериализации списка типов атрибутов
/// <summary> /// Возвращает набор типов атрибутов. /// </summary> /// <returns>Набор типов атрибутов.</returns> public AttributeTypeSet GetTypeSet() { List<AttributeType> types = new List<AttributeType>();
for (int i = 0; i < _items.Count - 1; i ++) { var item = _items[i]; if (item.IsUse) { types.Add(new AttributeType(item.Name, item.Type, item.Values.Split(';'))); } }
return new AttributeTypeSet(types, new AttributeType(_items.Last().Name, _items.Last().Type, _items.Last().Values.Split(';'))); }
#region обработчики событий элемента управления dataGrid
private void dataGrid_GotFocus(object sender, RoutedEventArgs e) { if (e.OriginalSource.GetType() == typeof(DataGridCell)) { dataGrid.BeginEdit(e); } }
private void dataGrid_MouseDown(object sender, MouseButtonEventArgs e) { dataGrid.CommitEdit(); }
private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { AttributeTypesDataGridItem item = (AttributeTypesDataGridItem) e.Row.Item; if (item.IsValid()) { e.Row.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0)); } else { e.Row.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); } OnAttributeTypesChanged?.Invoke(this); }
#endregion обработчики событий элемента управления dataGrid
private void OnItemsCVChanged(object sender, EventArgs e) { if (OnAttributeTypesChanged!= null) { OnAttributeTypesChanged(this); } }
#region события
public delegate void ErrorOccuredHandler(object sender, string message); public event ErrorOccuredHandler OnErrorOccured;
public delegate void FileSavedHandler(object sender, string message); public event FileSavedHandler OnFileSaved;
public delegate void FileLoadedHandler(object sender, string message); public event FileLoadedHandler OnFileLoaded;
public delegate void AttributeTypesChangedHandler(object sender); public event AttributeTypesChangedHandler OnAttributeTypesChanged;
#endregion события } }
|
||
|
Последнее изменение этой страницы: 2016-08-10; просмотров: 284; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.006 с.) |