@@ -0,0 +1,8 @@ | |||||
<Application | |||||
x:Class="BPASmart.ConfigurationSoftware.App" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:local="clr-namespace:BPASmart.ConfigurationSoftware" | |||||
StartupUri="MainWindow.xaml"> | |||||
<Application.Resources /> | |||||
</Application> |
@@ -0,0 +1,17 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Configuration; | |||||
using System.Data; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | |||||
using System.Windows; | |||||
namespace BPASmart.ConfigurationSoftware | |||||
{ | |||||
/// <summary> | |||||
/// Interaction logic for App.xaml | |||||
/// </summary> | |||||
public partial class App : Application | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,10 @@ | |||||
using System.Windows; | |||||
[assembly: ThemeInfo( | |||||
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located | |||||
//(used if a resource is not found in the page, | |||||
// or application resource dictionaries) | |||||
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located | |||||
//(used if a resource is not found in the page, | |||||
// app, or any theme specific resource dictionaries) | |||||
)] |
@@ -0,0 +1,28 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<OutputType>WinExe</OutputType> | |||||
<TargetFramework>net6.0-windows</TargetFramework> | |||||
<Nullable>enable</Nullable> | |||||
<UseWPF>true</UseWPF> | |||||
<UseWindowsForms>true</UseWindowsForms> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.7" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\BeDesignerSCADA\BeDesignerSCADA.csproj" /> | |||||
<ProjectReference Include="..\BPASmart.DataServer\BPASmart.DataServer.csproj" /> | |||||
<ProjectReference Include="..\BPASmart.Model\BPASmart.Model.csproj" /> | |||||
<ProjectReference Include="..\BPASmart.RecipeManagement\BPASmart.RecipeManagement.csproj" /> | |||||
<ProjectReference Include="..\BPASmart.VariableManager\BPASmart.VariableManager.csproj" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Folder Include="ViewModel\" /> | |||||
<Folder Include="View\" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -0,0 +1,207 @@ | |||||
<Window | |||||
x:Class="BPASmart.ConfigurationSoftware.MainWindow" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:local="clr-namespace:BPASmart.ConfigurationSoftware" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
Title="MainWindow" | |||||
Width="800" | |||||
Height="450" | |||||
Topmost="False" | |||||
WindowStartupLocation="CenterScreen" | |||||
mc:Ignorable="d"> | |||||
<Window.DataContext> | |||||
<local:MainWindowViewModel /> | |||||
</Window.DataContext> | |||||
<Window.Resources> | |||||
<!--#region 下拉列表单选按钮样式--> | |||||
<Style x:Key="RadioMiniButtonStyle" TargetType="{x:Type RadioButton}"> | |||||
<Setter Property="Margin" Value="20,1,1,1" /> | |||||
<!--<Setter Property="Width" Value="160" />--> | |||||
<!--<Setter Property="Height" Value="30" />--> | |||||
<Setter Property="FontSize" Value="14" /> | |||||
<Setter Property="FontFamily" Value="粗体" /> | |||||
<Setter Property="VerticalContentAlignment" Value="Center" /> | |||||
<Setter Property="HorizontalContentAlignment" Value="left" /> | |||||
<Setter Property="BorderBrush" Value="Transparent" /> | |||||
<Setter Property="BorderThickness" Value="0" /> | |||||
<Setter Property="Background" Value="#ddd" /> | |||||
<Setter Property="HorizontalAlignment" Value="left" /> | |||||
<Setter Property="Template"> | |||||
<Setter.Value> | |||||
<ControlTemplate TargetType="{x:Type RadioButton}"> | |||||
<Grid | |||||
x:Name="templateRoot" | |||||
Background="Transparent" | |||||
SnapsToDevicePixels="True"> | |||||
<Border x:Name="border2" /> | |||||
<ContentPresenter | |||||
x:Name="contentPresenter" | |||||
Margin="{TemplateBinding Padding}" | |||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" | |||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" | |||||
Content="{TemplateBinding Content}" | |||||
ContentStringFormat="{TemplateBinding ContentStringFormat}" | |||||
ContentTemplate="{TemplateBinding ContentTemplate}" | |||||
Focusable="False" | |||||
RecognizesAccessKey="True" | |||||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> | |||||
</Grid> | |||||
<ControlTemplate.Triggers> | |||||
<Trigger Property="HasContent" Value="True"> | |||||
<Setter Property="FocusVisualStyle"> | |||||
<Setter.Value> | |||||
<Style> | |||||
<Setter Property="Control.Template"> | |||||
<Setter.Value> | |||||
<ControlTemplate> | |||||
<Rectangle | |||||
Margin="14,0,0,0" | |||||
SnapsToDevicePixels="True" | |||||
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" | |||||
StrokeDashArray="1 2" | |||||
StrokeThickness="1" /> | |||||
</ControlTemplate> | |||||
</Setter.Value> | |||||
</Setter> | |||||
</Style> | |||||
</Setter.Value> | |||||
</Setter> | |||||
<Setter Property="Padding" Value="4,-1,0,0" /> | |||||
</Trigger> | |||||
<Trigger Property="IsChecked" Value="{x:Null}" /> | |||||
<Trigger Property="IsChecked" Value="true"> | |||||
<!--<Setter Property="Foreground" Value="White" />--> | |||||
<Setter TargetName="border2" Property="Background" Value="red" /> | |||||
</Trigger> | |||||
<Trigger Property="IsChecked" Value="false"> | |||||
<Setter TargetName="border2" Property="Background" Value="Transparent" /> | |||||
<!--<Setter Property="Foreground" Value="#4B8EC4" />--> | |||||
</Trigger> | |||||
<MultiTrigger> | |||||
<MultiTrigger.Conditions> | |||||
<Condition Property="IsChecked" Value="false" /> | |||||
<Condition Property="IsMouseOver" Value="True" /> | |||||
</MultiTrigger.Conditions> | |||||
<MultiTrigger.Setters> | |||||
<Setter TargetName="border2" Property="Background" Value="#55007acc" /> | |||||
</MultiTrigger.Setters> | |||||
</MultiTrigger> | |||||
</ControlTemplate.Triggers> | |||||
</ControlTemplate> | |||||
</Setter.Value> | |||||
</Setter> | |||||
</Style> | |||||
<!--#endregion--> | |||||
</Window.Resources> | |||||
<Grid> | |||||
<Grid.RowDefinitions> | |||||
<RowDefinition Height="30" /> | |||||
<RowDefinition /> | |||||
</Grid.RowDefinitions> | |||||
<StackPanel Orientation="Horizontal"> | |||||
<Button | |||||
Width="60" | |||||
Margin="5" | |||||
Command="{Binding NewCommand}" | |||||
Content="新建" /> | |||||
<Button | |||||
Width="60" | |||||
Margin="5" | |||||
Command="{Binding NewCommand}" | |||||
Content="保存" /> | |||||
<Button | |||||
Width="60" | |||||
Margin="5" | |||||
Command="{Binding}" | |||||
Content="打开" /> | |||||
<Button | |||||
Width="60" | |||||
Margin="5" | |||||
Content="运行" /> | |||||
<Button | |||||
Width="60" | |||||
Margin="5" | |||||
Command="{Binding OpenVarManagerCommand}" | |||||
Content="变量管理" /> | |||||
</StackPanel> | |||||
<Grid Grid.Row="1"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition Width="150" /> | |||||
<ColumnDefinition /> | |||||
</Grid.ColumnDefinitions> | |||||
<Grid> | |||||
<Grid.RowDefinitions> | |||||
<RowDefinition Height="20" /> | |||||
<RowDefinition /> | |||||
</Grid.RowDefinitions> | |||||
<TextBlock | |||||
Margin="5,0,0,0" | |||||
HorizontalAlignment="Left" | |||||
VerticalAlignment="Center" | |||||
Text="{Binding Head}"> | |||||
<TextBlock.ContextMenu> | |||||
<ContextMenu> | |||||
<MenuItem Command="{Binding NewPageCommand}" Header="新建页面" /> | |||||
</ContextMenu> | |||||
</TextBlock.ContextMenu> | |||||
</TextBlock> | |||||
<ScrollViewer | |||||
Grid.Row="1" | |||||
HorizontalScrollBarVisibility="Hidden" | |||||
VerticalScrollBarVisibility="Hidden"> | |||||
<ItemsControl ItemsSource="{Binding Pages}"> | |||||
<ItemsControl.ItemTemplate> | |||||
<DataTemplate> | |||||
<Grid> | |||||
<RadioButton | |||||
Command="{Binding DataContext.SelectedCommand, RelativeSource={RelativeSource AncestorType=Window, Mode=FindAncestor}}" | |||||
CommandParameter="{Binding}" | |||||
Content="{Binding}" | |||||
GroupName="All" | |||||
Style="{StaticResource RadioMiniButtonStyle}"> | |||||
<RadioButton.ContextMenu> | |||||
<ContextMenu> | |||||
<MenuItem Header="删除页面" /> | |||||
<MenuItem Header="设为启动界面" /> | |||||
<MenuItem Header="重命名" /> | |||||
</ContextMenu> | |||||
</RadioButton.ContextMenu> | |||||
</RadioButton> | |||||
</Grid> | |||||
</DataTemplate> | |||||
</ItemsControl.ItemTemplate> | |||||
</ItemsControl> | |||||
</ScrollViewer> | |||||
</Grid> | |||||
<Canvas Name="cav" Grid.Column="1" Grid.Row="1"> | |||||
</Canvas> | |||||
</Grid> | |||||
</Grid> | |||||
</Window> |
@@ -0,0 +1,31 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
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 BPASmart.ConfigurationSoftware | |||||
{ | |||||
/// <summary> | |||||
/// Interaction logic for MainWindow.xaml | |||||
/// </summary> | |||||
public partial class MainWindow : Window | |||||
{ | |||||
public MainWindow() | |||||
{ | |||||
InitializeComponent(); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,93 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using BPASmart.Model; | |||||
using Microsoft.Toolkit.Mvvm.Input; | |||||
using System.Collections.ObjectModel; | |||||
using System.Windows.Forms; | |||||
using System.IO; | |||||
using BPA.Helper; | |||||
using System.Diagnostics; | |||||
using BeDesignerSCADA; | |||||
namespace BPASmart.ConfigurationSoftware | |||||
{ | |||||
public class MainWindowViewModel : NoticeBase | |||||
{ | |||||
string LayoutPath | |||||
{ | |||||
get | |||||
{ | |||||
Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"AccessFile\\Layouts")); | |||||
return $"{AppDomain.CurrentDomain.BaseDirectory}AccessFile\\Layouts\\"; | |||||
} | |||||
} | |||||
public MainWindowViewModel() | |||||
{ | |||||
ActionManage.GetInstance.Register(new Action<object>((o) => | |||||
{ | |||||
Pages.Add(o.ToString()); | |||||
File.WriteAllText(LayoutPath + o.ToString(), null, Encoding.Unicode); | |||||
}), "PageName"); | |||||
NewCommand = new RelayCommand(() => | |||||
{ | |||||
NewProjectView newProjectView = new NewProjectView(); | |||||
bool? result = newProjectView.ShowDialog(); | |||||
if (result != null && result == true) | |||||
{ | |||||
if (newProjectView.Tag != null && newProjectView.Tag is NewDataModel objModel) | |||||
{ | |||||
Directory.CreateDirectory(Path.Combine(objModel.ProjectPath, objModel.ProjectName)); | |||||
Head = objModel.ProjectName; | |||||
} | |||||
} | |||||
}); | |||||
NewPageCommand = new RelayCommand(() => | |||||
{ | |||||
NewPageView newPageView = new NewPageView(); | |||||
newPageView.ShowDialog(); | |||||
}); | |||||
OpenVarManagerCommand = new RelayCommand(() => | |||||
{ | |||||
string path = $"{AppDomain.CurrentDomain.BaseDirectory}BPASmart.VariableManager.exe"; | |||||
if (File.Exists(path)) | |||||
{ | |||||
Process[] pro = Process.GetProcesses(); | |||||
if (pro?.ToList().FirstOrDefault(p => p.ProcessName.Contains("BPASmart.VariableManager")) == null) | |||||
{ | |||||
Process.Start(path); | |||||
} | |||||
} | |||||
}); | |||||
SelectedCommand = new RelayCommand<object>((o) => | |||||
{ | |||||
}); | |||||
} | |||||
public RelayCommand NewCommand { get; set; } | |||||
public RelayCommand OpenVarManagerCommand { get; set; } | |||||
public RelayCommand<object> SelectedCommand { get; set; } | |||||
public RelayCommand SaveCommand { get; set; } | |||||
public RelayCommand NewPageCommand { get; set; } | |||||
public string Head { get { return _mHead; } set { _mHead = value; OnPropertyChanged(); } } | |||||
private string _mHead; | |||||
//public ObservableCollection<MainCanvasPanel> | |||||
public ObservableCollection<string> Pages { get; set; } = new ObservableCollection<string>(); | |||||
} | |||||
} |
@@ -0,0 +1,19 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using BPASmart.Model; | |||||
namespace BPASmart.ConfigurationSoftware | |||||
{ | |||||
public class NewDataModel : NoticeBase | |||||
{ | |||||
public string ProjectName { get { return _mProjectName; } set { _mProjectName = value; OnPropertyChanged(); } } | |||||
private string _mProjectName; | |||||
public string ProjectPath { get { return _mProjectPath; } set { _mProjectPath = value; OnPropertyChanged(); } } | |||||
private string _mProjectPath; | |||||
} | |||||
} |
@@ -0,0 +1,54 @@ | |||||
<Window | |||||
x:Class="BPASmart.ConfigurationSoftware.NewPageView" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:local="clr-namespace:BPASmart.ConfigurationSoftware" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
Title="新建页面" | |||||
Width="300" | |||||
Height="180" | |||||
WindowStartupLocation="CenterScreen" | |||||
mc:Ignorable="d"> | |||||
<Grid Margin="10"> | |||||
<Grid.RowDefinitions> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
</Grid.RowDefinitions> | |||||
<TextBlock | |||||
Margin="0,0,0,5" | |||||
VerticalAlignment="Bottom" | |||||
Text="页面名称:" /> | |||||
<TextBox | |||||
Name="pageName" | |||||
Grid.Row="1" | |||||
Height="30" | |||||
VerticalAlignment="Top" | |||||
FontSize="16" | |||||
Text="{Binding NewData.ProjectName}" /> | |||||
<Grid Grid.Row="4"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition Width="35*" /> | |||||
<ColumnDefinition Width="32*" /> | |||||
<ColumnDefinition Width="3*" /> | |||||
</Grid.ColumnDefinitions> | |||||
<Button Margin="10,2,10,2" Content="创建" Click="Button_Click_1" /> | |||||
<Button | |||||
Grid.Column="1" | |||||
Grid.ColumnSpan="2" | |||||
Margin="10,2,10,2" | |||||
Content="取消" Click="Button_Click" /> | |||||
</Grid> | |||||
</Grid> | |||||
</Window> |
@@ -0,0 +1,45 @@ | |||||
using BPA.Helper; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
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.Shapes; | |||||
namespace BPASmart.ConfigurationSoftware | |||||
{ | |||||
/// <summary> | |||||
/// NewPageView.xaml 的交互逻辑 | |||||
/// </summary> | |||||
public partial class NewPageView : Window | |||||
{ | |||||
public NewPageView() | |||||
{ | |||||
InitializeComponent(); | |||||
} | |||||
private void Button_Click(object sender, RoutedEventArgs e) | |||||
{ | |||||
this.DialogResult = false; | |||||
this.Close(); | |||||
} | |||||
private void Button_Click_1(object sender, RoutedEventArgs e) | |||||
{ | |||||
if (this.pageName.Text.Trim().Length > 0) | |||||
{ | |||||
this.DialogResult = true; | |||||
ActionManage.GetInstance.Send("PageName", this.pageName.Text); | |||||
this.Close(); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,73 @@ | |||||
<Window | |||||
x:Class="BPASmart.ConfigurationSoftware.NewProjectView" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:local="clr-namespace:BPASmart.ConfigurationSoftware" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
Title="创建新项目" | |||||
Width="300" | |||||
Height="180" | |||||
WindowStartupLocation="CenterScreen" | |||||
mc:Ignorable="d"> | |||||
<Window.DataContext> | |||||
<local:NewProjectViewModel /> | |||||
</Window.DataContext> | |||||
<Grid Margin="10"> | |||||
<Grid.RowDefinitions> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
<RowDefinition /> | |||||
</Grid.RowDefinitions> | |||||
<TextBlock VerticalAlignment="Center" Text="项目名称:" /> | |||||
<TextBox | |||||
Grid.Row="1" | |||||
VerticalAlignment="Center" | |||||
Text="{Binding NewData.ProjectName}" /> | |||||
<TextBlock | |||||
Grid.Row="2" | |||||
VerticalAlignment="Center" | |||||
Text="项目路径:" /> | |||||
<Grid Grid.Row="3"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition Width="30" /> | |||||
</Grid.ColumnDefinitions> | |||||
<TextBlock VerticalAlignment="Center" Text="{Binding NewData.ProjectPath}" /> | |||||
<Button | |||||
Grid.Column="1" | |||||
VerticalAlignment="Center" | |||||
Command="{Binding OpenBrowserDialogCommand}" | |||||
Content="..." /> | |||||
</Grid> | |||||
<Grid Grid.Row="4"> | |||||
<Grid.ColumnDefinitions> | |||||
<ColumnDefinition Width="35*" /> | |||||
<ColumnDefinition Width="32*" /> | |||||
<ColumnDefinition Width="3*" /> | |||||
</Grid.ColumnDefinitions> | |||||
<Button | |||||
Margin="10,2,10,2" | |||||
Command="{Binding CreateCommand}" | |||||
Content="创建" /> | |||||
<Button | |||||
Grid.Column="1" | |||||
Grid.ColumnSpan="2" | |||||
Margin="10,2,10,2" | |||||
Command="{Binding CancelCommand}" | |||||
Content="取消" /> | |||||
</Grid> | |||||
</Grid> | |||||
</Window> |
@@ -0,0 +1,41 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
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.Shapes; | |||||
using BPA.Helper; | |||||
namespace BPASmart.ConfigurationSoftware | |||||
{ | |||||
/// <summary> | |||||
/// NewProjectView.xaml 的交互逻辑 | |||||
/// </summary> | |||||
public partial class NewProjectView : Window | |||||
{ | |||||
public NewProjectView() | |||||
{ | |||||
InitializeComponent(); | |||||
ActionManage.GetInstance.Register(new Action<object>((o) => | |||||
{ | |||||
this.DialogResult = true; | |||||
this.Tag = o; | |||||
this.Close(); | |||||
}), "CreateCommand", true); | |||||
ActionManage.GetInstance.Register(new Action(() => | |||||
{ | |||||
this.DialogResult = false; | |||||
this.Close(); | |||||
}), "CancelCommand", true); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,56 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using BPASmart.Model; | |||||
using Microsoft.Toolkit.Mvvm.Input; | |||||
using System.Windows; | |||||
using BPA.Helper; | |||||
using System.Windows.Forms; | |||||
namespace BPASmart.ConfigurationSoftware | |||||
{ | |||||
public class NewProjectViewModel : NoticeBase | |||||
{ | |||||
public NewProjectViewModel() | |||||
{ | |||||
OpenBrowserDialogCommand = new RelayCommand(() => | |||||
{ | |||||
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); | |||||
if (folderBrowserDialog.ShowDialog() == DialogResult.OK) | |||||
{ | |||||
NewData.ProjectPath = folderBrowserDialog.SelectedPath; | |||||
} | |||||
}); | |||||
CreateCommand = new RelayCommand(() => | |||||
{ | |||||
ActionManage.GetInstance.Send("CreateCommand", NewData); | |||||
}); | |||||
CancelCommand = new RelayCommand(() => { ActionManage.GetInstance.Send("CancelCommand"); }); | |||||
} | |||||
public NewDataModel NewData { get { return _mNewData; } set { _mNewData = value; OnPropertyChanged(); } } | |||||
private NewDataModel _mNewData = new NewDataModel(); | |||||
//public string ProjectName { get { return _mProjectName; } set { _mProjectName = value; OnPropertyChanged(); } } | |||||
//private string _mProjectName; | |||||
//public string ProjectPath { get { return _mProjectPath; } set { _mProjectPath = value; OnPropertyChanged(); } } | |||||
//private string _mProjectPath; | |||||
public RelayCommand CreateCommand { get; set; } | |||||
public RelayCommand OpenBrowserDialogCommand { get; set; } | |||||
public RelayCommand CancelCommand { get; set; } | |||||
} | |||||
} |
@@ -7,6 +7,9 @@ using System.Collections.ObjectModel; | |||||
namespace BPASmart.Model | namespace BPASmart.Model | ||||
{ | { | ||||
/// <summary> | |||||
/// 通讯参数配置 | |||||
/// </summary> | |||||
public class CommunicationPar | public class CommunicationPar | ||||
{ | { | ||||
public ObservableCollection<CommunicationModel> CommunicationDevices { get; set; } = new ObservableCollection<CommunicationModel>(); | public ObservableCollection<CommunicationModel> CommunicationDevices { get; set; } = new ObservableCollection<CommunicationModel>(); |
@@ -0,0 +1,29 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmart.Model | |||||
{ | |||||
/// <summary> | |||||
/// 连接参数 | |||||
/// </summary> | |||||
public class ConnectPar | |||||
{ | |||||
#region Redis 连接信息 | |||||
public string Redis_Host { get; set; } | |||||
public int Redis_Port { get; set; } | |||||
public string Redis_Password { get; set; } | |||||
public int Redis_DB { get; set; } | |||||
#endregion | |||||
#region MQTT 连接信息 | |||||
public string MQTT_IP { get; set; } | |||||
public int MQTT_Port { get; set; } | |||||
public string MQTT_UserName { get; set; } | |||||
public string MQTT_Password { get; set; } | |||||
#endregion | |||||
} | |||||
} |
@@ -11,5 +11,6 @@ namespace BPASmart.Model | |||||
{ | { | ||||
public class NoticeBase : ObservableObject | public class NoticeBase : ObservableObject | ||||
{ | { | ||||
} | } | ||||
} | } |
@@ -0,0 +1,26 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmart.Model | |||||
{ | |||||
public class Topics | |||||
{ | |||||
/// <summary> | |||||
/// 设备控制主题 | |||||
/// </summary> | |||||
public const string DeviceControl = "DistributedHostComputer/Control"; | |||||
/// <summary> | |||||
/// 配方下发主题 | |||||
/// </summary> | |||||
public const string RecipeIssued = "DistributedHostComputer/RecipeIssued"; | |||||
/// <summary> | |||||
/// 业务主题下发 | |||||
/// </summary> | |||||
public const string Business = "DistributedHostComputer/Business"; | |||||
} | |||||
} |
@@ -19,7 +19,6 @@ namespace BPASmart.Server | |||||
MqttInit(); | MqttInit(); | ||||
Json<CommunicationPar>.Data.CommunicationDevices.ToList()?.ForEach(item => | Json<CommunicationPar>.Data.CommunicationDevices.ToList()?.ForEach(item => | ||||
{ | { | ||||
ThreadManage.GetInstance().Start(new Action(() => | ThreadManage.GetInstance().Start(new Action(() => | ||||
{ | { | ||||
switch (item.CommDevice) | switch (item.CommDevice) | ||||
@@ -35,82 +34,38 @@ namespace BPASmart.Server | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | ThreadManage.GetInstance().StartLong(new Action(() => | ||||
{ | { | ||||
item.VarTableModels.GetReadDataModels().ToList()?.ForEach(temp => | item.VarTableModels.GetReadDataModels().ToList()?.ForEach(temp => | ||||
{ | |||||
//switch (temp.Key) | |||||
//{ | |||||
// case EDataType.Bool: | |||||
// temp.Value?.ForEach(value => | |||||
// { | |||||
// //var res = modbusTcpMaster.ReadBool(value.StartAddress.ToString(), value.Length); | |||||
// var res = modbusTcpMaster.Read<bool[]>(value.StartAddress.ToString(), value.Length); | |||||
// SetValue(res.Content, item.DeviceName, value, 1); | |||||
// }); | |||||
// break; | |||||
// case EDataType.Byte: | |||||
// break; | |||||
// case EDataType.Int: | |||||
// break; | |||||
// case EDataType.Word: | |||||
// temp.Value?.ForEach(value => | |||||
// { | |||||
// //var res = modbusTcpMaster.ReadUshort(value.StartAddress.ToString(), value.Length); | |||||
// var res = modbusTcpMaster.Read<ushort[]>(value.StartAddress.ToString(), value.Length); | |||||
// SetValue(res.Content, item.DeviceName, value, 1); | |||||
// }); | |||||
// break; | |||||
// case EDataType.Dint: | |||||
// break; | |||||
// case EDataType.Dword: | |||||
// temp.Value?.ForEach(value => | |||||
// { | |||||
// //var res = modbusTcpMaster.ReadUint(value.StartAddress.ToString(), value.Length); | |||||
// var res = modbusTcpMaster.Read<uint[]>(value.StartAddress.ToString(), value.Length); | |||||
// SetValue(res.Content, item.DeviceName, value, 2); | |||||
// }); | |||||
// break; | |||||
// case EDataType.Float: | |||||
// temp.Value?.ForEach(value => | |||||
// { | |||||
// //var res = modbusTcpMaster.ReadFloat(value.StartAddress.ToString(), value.Length); | |||||
// var res = modbusTcpMaster.Read<float[]>(value.StartAddress.ToString(), value.Length); | |||||
// SetValue(res.Content, item.DeviceName, value, 2); | |||||
// }); | |||||
// break; | |||||
// default: | |||||
// break; | |||||
//} | |||||
Array ResultArray = null; | |||||
temp.Value?.ForEach(value => | |||||
{ | |||||
switch (temp.Key) | |||||
{ | |||||
case EDataType.Bool: | |||||
ResultArray = modbusTcpMaster.Read<bool[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Byte: | |||||
break; | |||||
case EDataType.Int: | |||||
ResultArray = modbusTcpMaster.Read<short[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Word: | |||||
ResultArray = modbusTcpMaster.Read<ushort[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Dint: | |||||
ResultArray = modbusTcpMaster.Read<int[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Dword: | |||||
ResultArray = modbusTcpMaster.Read<uint[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Float: | |||||
ResultArray = modbusTcpMaster.Read<float[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
SetValue(ResultArray, item.DeviceName, value, temp.Key); | |||||
}); | |||||
}); | |||||
{ | |||||
Array ResultArray = null; | |||||
temp.Value?.ForEach(value => | |||||
{ | |||||
switch (temp.Key) | |||||
{ | |||||
case EDataType.Bool: | |||||
ResultArray = modbusTcpMaster.Read<bool[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Byte: | |||||
break; | |||||
case EDataType.Int: | |||||
ResultArray = modbusTcpMaster.Read<short[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Word: | |||||
ResultArray = modbusTcpMaster.Read<ushort[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Dint: | |||||
ResultArray = modbusTcpMaster.Read<int[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Dword: | |||||
ResultArray = modbusTcpMaster.Read<uint[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
case EDataType.Float: | |||||
ResultArray = modbusTcpMaster.Read<float[]>(value.StartAddress.ToString(), value.Length)?.Content; | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
SetValue(ResultArray, item.DeviceName, value, temp.Key); | |||||
}); | |||||
}); | |||||
Thread.Sleep(100); | Thread.Sleep(100); | ||||
}), $"{item.DeviceName} 设备数据采集"); | }), $"{item.DeviceName} 设备数据采集"); | ||||
@@ -135,7 +90,7 @@ namespace BPASmart.Server | |||||
mqttHelper.Connect("admin", "fengyoufu067101!@#", "124.222.238.75", 61613, $"分布式上位机:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); | mqttHelper.Connect("admin", "fengyoufu067101!@#", "124.222.238.75", 61613, $"分布式上位机:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); | ||||
mqttHelper.ConnectOk = new Action(() => | mqttHelper.ConnectOk = new Action(() => | ||||
{ | { | ||||
mqttHelper.Subscrib("DistributedHostComputer/Control"); | |||||
mqttHelper.Subscrib(Topics.DeviceControl); | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | ThreadManage.GetInstance().StartLong(new Action(() => | ||||
{ | { | ||||
while (msg.Count > 0) | while (msg.Count > 0) | ||||
@@ -175,31 +130,24 @@ namespace BPASmart.Server | |||||
switch (item.DataType) | switch (item.DataType) | ||||
{ | { | ||||
case EDataType.Bool: | case EDataType.Bool: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value)); | ||||
break; | break; | ||||
case EDataType.Byte: | case EDataType.Byte: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value)); | ||||
break; | break; | ||||
case EDataType.Int: | case EDataType.Int: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value)); | ||||
break; | break; | ||||
case EDataType.Word: | case EDataType.Word: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value)); | ||||
break; | break; | ||||
case EDataType.Dint: | case EDataType.Dint: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value)); | ||||
break; | break; | ||||
case EDataType.Dword: | case EDataType.Dword: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value)); | ||||
break; | break; | ||||
case EDataType.Float: | case EDataType.Float: | ||||
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value)); | |||||
CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value)); | CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value)); | ||||
break; | break; | ||||
default: | default: | ||||
@@ -213,64 +161,6 @@ namespace BPASmart.Server | |||||
} | } | ||||
} | } | ||||
//private void SetValue<TArray>(TArray[] arrays, string DeviceName, ReadDataModel readDataModel, ushort by) | |||||
//{ | |||||
// if (arrays != null) | |||||
// { | |||||
// int index = Array.FindIndex(Json<CommunicationPar>.Data.CommunicationDevices.ToArray(), p => p.DeviceName == DeviceName);//获取设备所在集合位置 | |||||
// if (index >= 0 && index < Json<CommunicationPar>.Data.CommunicationDevices.Count) | |||||
// { | |||||
// var tempArray = Json<CommunicationPar>.Data.CommunicationDevices.ElementAt(index).VarTableModels.ToArray(); | |||||
// for (int i = 0; i < arrays.Length; i++) | |||||
// { | |||||
// int varIndex = Array.FindIndex(tempArray, p => p.RealAddress == (readDataModel.StartAddress + (i * by)).ToString()); | |||||
// if (varIndex >= 0 && varIndex < tempArray.Length) | |||||
// { | |||||
// Json<CommunicationPar>.Data.CommunicationDevices.ElementAt(index).VarTableModels.ElementAt(varIndex).CurrentValue = arrays[i].ToString(); | |||||
// } | |||||
// } | |||||
// var Devicename = Json<CommunicationPar>.Data.CommunicationDevices[index].DeviceName; | |||||
// List<ReeisDataModel> reeisDataModels = new List<ReeisDataModel>(); | |||||
// Json<CommunicationPar>.Data.CommunicationDevices[index].VarTableModels.ToList().ForEach(tempVar => | |||||
// { | |||||
// if (tempVar.VarName.Length > 0) | |||||
// { | |||||
// reeisDataModels.Add(new ReeisDataModel() | |||||
// { | |||||
// VarName = tempVar.VarName, | |||||
// VarVaule = tempVar.CurrentValue, | |||||
// DataType = (EDataType)Enum.Parse(typeof(EDataType), tempVar.DataType) | |||||
// }); | |||||
// } | |||||
// }); | |||||
// RedisHelper.GetInstance.SetValue($"{Devicename}", reeisDataModels); | |||||
// } | |||||
// } | |||||
//} | |||||
//private ushort GetBySize(EDataType eDataType) | |||||
//{ | |||||
// switch (eDataType) | |||||
// { | |||||
// case EDataType.Bool: | |||||
// case EDataType.Byte: | |||||
// case EDataType.Int: | |||||
// case EDataType.Word: | |||||
// return 1; | |||||
// case EDataType.Dint: | |||||
// case EDataType.Dword: | |||||
// case EDataType.Float: | |||||
// return 2; | |||||
// case EDataType.Double: | |||||
// break; | |||||
// case EDataType.String: | |||||
// break; | |||||
// default: | |||||
// break; | |||||
// } | |||||
// return 1; | |||||
//} | |||||
private void SetValue(Array arrays, string DeviceName, ReadDataModel readDataModel, EDataType eDataType) | private void SetValue(Array arrays, string DeviceName, ReadDataModel readDataModel, EDataType eDataType) | ||||
{ | { | ||||
if (arrays != null) | if (arrays != null) | ||||
@@ -307,72 +197,5 @@ namespace BPASmart.Server | |||||
} | } | ||||
} | } | ||||
//private Dictionary<EDataType, List<ReadDataModel>> GetReadDataModels(CommunicationModel communicationModel) | |||||
//{ | |||||
// Dictionary<EDataType, List<ReadDataModel>> readDataModels = new Dictionary<EDataType, List<ReadDataModel>>(); | |||||
// communicationModel.VarTableModels.GroupBy(p => p.DataType)?.ToList()?.ForEach(tempVar => | |||||
// { | |||||
// if (tempVar.Key != null && tempVar.Key.Length > 0) | |||||
// { | |||||
// //int address = tempVar.Min(p => p.RealAddress); | |||||
// EDataType dataType = (EDataType)Enum.Parse(typeof(EDataType), tempVar.Key); | |||||
// switch (dataType) | |||||
// { | |||||
// case EDataType.Bool: | |||||
// case EDataType.Byte: | |||||
// case EDataType.Int: | |||||
// case EDataType.Word: | |||||
// if (!readDataModels.ContainsKey(dataType)) readDataModels.TryAdd(dataType, GetDataGroup(tempVar)); | |||||
// break; | |||||
// case EDataType.Dint: | |||||
// case EDataType.Dword: | |||||
// case EDataType.Float: | |||||
// if (!readDataModels.ContainsKey(dataType)) readDataModels.TryAdd(dataType, GetDataGroup(tempVar, 2)); | |||||
// break; | |||||
// default: | |||||
// break; | |||||
// } | |||||
// } | |||||
// }); | |||||
// return readDataModels; | |||||
//} | |||||
//private List<ReadDataModel> GetDataGroup(IGrouping<string, VariableInfo> variableInfos, int by = 1) | |||||
//{ | |||||
// List<ReadDataModel> ReturnValue = new List<ReadDataModel>(); | |||||
// var res = variableInfos?.OrderBy(p => p.RealAddress).ToList(); | |||||
// List<int> RealAddresss = new List<int>(); | |||||
// variableInfos.ToList()?.ForEach(item => { if (int.TryParse(item.RealAddress, out int add)) RealAddresss.Add(add); }); | |||||
// int count = 0; | |||||
// if (res != null) | |||||
// { | |||||
// //int address = variableInfos.Min(p => p.RealAddress); | |||||
// int address = RealAddresss.Min(); | |||||
// int startAddress = address; | |||||
// for (int i = 0; i < res.Count; i++) | |||||
// { | |||||
// if (int.TryParse(res.ElementAt(i).RealAddress, out int TempAddress)) | |||||
// { | |||||
// if (TempAddress == address) | |||||
// { | |||||
// count++; | |||||
// address += by; | |||||
// } | |||||
// else | |||||
// { | |||||
// ReturnValue.Add(new ReadDataModel() { StartAddress = (ushort)startAddress, Length = (ushort)count }); | |||||
// count = 1; | |||||
// address = TempAddress + by; | |||||
// startAddress = TempAddress; | |||||
// } | |||||
// } | |||||
// } | |||||
// ReturnValue.Add(new ReadDataModel() { StartAddress = (ushort)startAddress, Length = (ushort)count }); | |||||
// } | |||||
// return ReturnValue; | |||||
//} | |||||
} | } | ||||
} | } |
@@ -0,0 +1,9 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>net6.0</TargetFramework> | |||||
<ImplicitUsings>enable</ImplicitUsings> | |||||
<Nullable>enable</Nullable> | |||||
</PropertyGroup> | |||||
</Project> |
@@ -0,0 +1,44 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using System.Collections.Concurrent; | |||||
namespace BPASmart.SmallBatchingSystem | |||||
{ | |||||
public class DataModel | |||||
{ | |||||
public ConcurrentDictionary<string, string> OutletInformation { get; set; } = new ConcurrentDictionary<string, string>(); | |||||
} | |||||
/// <summary> | |||||
/// 料仓信息 | |||||
/// </summary> | |||||
public class SiloInformation | |||||
{ | |||||
/// <summary> | |||||
/// 料仓位置 | |||||
/// </summary> | |||||
public string SiloLoc { get; set; } = string.Empty; | |||||
/// <summary> | |||||
/// 料仓名称 | |||||
/// </summary> | |||||
public string SiloName { get; set; } = string.Empty; | |||||
} | |||||
/// <summary> | |||||
/// 出料口信息 | |||||
/// </summary> | |||||
public class FeedMouth | |||||
{ | |||||
public string FeedMouthLoc { get; set; } = string.Empty; | |||||
public string FeedMouthName { get; set; } = string.Empty; | |||||
public List<SiloInformation> SiloInformations { get; set; } = new List<SiloInformation>(); | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
namespace BPASmart.SmallBatchingSystem | |||||
{ | |||||
public class Main | |||||
{ | |||||
private volatile static Main _Instance; | |||||
public static Main GetInstance => _Instance ?? (_Instance = new Main()); | |||||
private Main() { } | |||||
public void Start() | |||||
{ | |||||
} | |||||
} | |||||
} |
@@ -2,11 +2,11 @@ | |||||
x:Class="BPASmartClient.CustomResource.Pages.View.NfcSetView" | x:Class="BPASmartClient.CustomResource.Pages.View.NfcSetView" | ||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||||
xmlns:common="clr-namespace:BPASmartClient.CustomResource.Pages.Model" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||||
xmlns:local="clr-namespace:BPASmartClient.CustomResource.Pages.View" | xmlns:local="clr-namespace:BPASmartClient.CustomResource.Pages.View" | ||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||||
xmlns:vm="clr-namespace:BPASmartClient.CustomResource.Pages.ViewModel" | xmlns:vm="clr-namespace:BPASmartClient.CustomResource.Pages.ViewModel" | ||||
xmlns:common="clr-namespace:BPASmartClient.CustomResource.Pages.Model" | |||||
Title="NfcSetView" | Title="NfcSetView" | ||||
Width="500" | Width="500" | ||||
Height="250" | Height="250" | ||||
@@ -139,8 +139,8 @@ | |||||
<Setter Property="Background" Value="Transparent" /> | <Setter Property="Background" Value="Transparent" /> | ||||
<Setter Property="BorderBrush" Value="#009DFF" /> | <Setter Property="BorderBrush" Value="#009DFF" /> | ||||
<Setter Property="BorderThickness" Value="0,0,0,1" /> | <Setter Property="BorderThickness" Value="0,0,0,1" /> | ||||
</Style> | </Style> | ||||
<!--#endregion--> | <!--#endregion--> | ||||
@@ -148,9 +148,9 @@ | |||||
<Style x:Key="UserTextBoxStyle" TargetType="TextBox"> | <Style x:Key="UserTextBoxStyle" TargetType="TextBox"> | ||||
<Setter Property="Background" Value="Transparent" /> | <Setter Property="Background" Value="Transparent" /> | ||||
<Setter Property="CaretBrush" Value="#009DFF" /> | <Setter Property="CaretBrush" Value="#009DFF" /> | ||||
<Setter Property="BorderBrush" Value="#009DFF"/> | |||||
<Setter Property="BorderThickness" Value="0,0,0,1"/> | |||||
<Setter Property="Foreground" Value="White"/> | |||||
<Setter Property="BorderBrush" Value="#009DFF" /> | |||||
<Setter Property="BorderThickness" Value="0,0,0,1" /> | |||||
<Setter Property="Foreground" Value="White" /> | |||||
<Setter Property="FontSize" Value="14" /> | <Setter Property="FontSize" Value="14" /> | ||||
</Style> | </Style> | ||||
<!--#endregion--> | <!--#endregion--> | ||||
@@ -170,9 +170,9 @@ | |||||
<Grid Background="Transparent"> | <Grid Background="Transparent"> | ||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> | <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> | ||||
<TextBlock | <TextBlock | ||||
Margin="0,0,0,10" | |||||
FontSize="16" | FontSize="16" | ||||
Foreground="#32B8FF" | Foreground="#32B8FF" | ||||
Margin="0,0,0,10" | |||||
Text="用户权限列表:" /> | Text="用户权限列表:" /> | ||||
<ItemsControl ItemsSource="{Binding permissions}"> | <ItemsControl ItemsSource="{Binding permissions}"> | ||||
@@ -222,50 +222,66 @@ | |||||
<RowDefinition /> | <RowDefinition /> | ||||
</Grid.RowDefinitions> | </Grid.RowDefinitions> | ||||
<Grid.ColumnDefinitions> | <Grid.ColumnDefinitions> | ||||
<ColumnDefinition Width="92*"/> | |||||
<ColumnDefinition Width="135*"/> | |||||
<ColumnDefinition Width="67*"/> | |||||
<ColumnDefinition Width="92*" /> | |||||
<ColumnDefinition Width="135*" /> | |||||
<ColumnDefinition Width="67*" /> | |||||
</Grid.ColumnDefinitions> | </Grid.ColumnDefinitions> | ||||
<TextBlock | <TextBlock | ||||
HorizontalAlignment="Center" | |||||
FontSize="16" | |||||
VerticalAlignment="Center" | |||||
Foreground="#FF32B8FF" | |||||
Text="当前卡号:" Height="21" Width="80" /> | |||||
<TextBlock Grid.Row="1" | |||||
HorizontalAlignment="Center" | |||||
FontSize="16" | |||||
VerticalAlignment="Center" | |||||
Foreground="#FF32B8FF" | |||||
Text="用户名:" Height="20" Width="64" /> | |||||
<TextBlock Grid.Row="2" | |||||
HorizontalAlignment="Center" | |||||
FontSize="16" | |||||
VerticalAlignment="Center" | |||||
Foreground="#FF32B8FF" | |||||
Text="当前密码:" Height="20" Width="80" /> | |||||
<TextBlock Grid.Row="3" | |||||
HorizontalAlignment="Center" | |||||
FontSize="16" | |||||
VerticalAlignment="Center" | |||||
Foreground="#FF32B8FF" | |||||
Text="确认密码:" Height="20" Width="80" /> | |||||
<TextBlock Grid.Column="1" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="#FF32B8FF" | |||||
Text="{Binding CardNum}" /> | |||||
<TextBox Grid.Row="1" Grid.Column="1" | |||||
Margin="11,4,10,4" | |||||
Text="{Binding UserName}" | |||||
Style="{DynamicResource UserTextBoxStyle}"/> | |||||
<PasswordBox Grid.Column="1" Grid.Row="2" | |||||
Width="80" | |||||
Height="21" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="#FF32B8FF" | |||||
Text="当前卡号:" /> | |||||
<TextBlock | |||||
Grid.Row="1" | |||||
Width="64" | |||||
Height="20" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="#FF32B8FF" | |||||
Text="用户名:" /> | |||||
<TextBlock | |||||
Grid.Row="2" | |||||
Width="80" | |||||
Height="20" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="#FF32B8FF" | |||||
Text="当前密码:" /> | |||||
<TextBlock | |||||
Grid.Row="3" | |||||
Width="80" | |||||
Height="20" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="#FF32B8FF" | |||||
Text="确认密码:" /> | |||||
<TextBlock | |||||
Grid.Column="1" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Foreground="#FF32B8FF" | |||||
Text="{Binding CardNum}" /> | |||||
<TextBox | |||||
Grid.Row="1" | |||||
Grid.Column="1" | |||||
Margin="11,4,10,4" | |||||
Style="{DynamicResource UserTextBoxStyle}" | |||||
Text="{Binding UserName}" /> | |||||
<PasswordBox | |||||
Name="newpb1" | Name="newpb1" | ||||
Grid.Row="2" | |||||
Grid.Column="1" | |||||
Margin="11,4,10,4" | Margin="11,4,10,4" | ||||
common:PasswordHelper.Attach="True" | common:PasswordHelper.Attach="True" | ||||
common:PasswordHelper.Password="{Binding CurrentPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" | common:PasswordHelper.Password="{Binding CurrentPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" | ||||
@@ -274,8 +290,10 @@ | |||||
Foreground="#aadddddd" | Foreground="#aadddddd" | ||||
Style="{DynamicResource PasswordBoxStyle}" | Style="{DynamicResource PasswordBoxStyle}" | ||||
TabIndex="2" /> | TabIndex="2" /> | ||||
<PasswordBox Grid.Column="1" Grid.Row="3" | |||||
<PasswordBox | |||||
Name="newpb2" | Name="newpb2" | ||||
Grid.Row="3" | |||||
Grid.Column="1" | |||||
Margin="11,4,10,4" | Margin="11,4,10,4" | ||||
common:PasswordHelper.Attach="True" | common:PasswordHelper.Attach="True" | ||||
common:PasswordHelper.Password="{Binding CheckPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" | common:PasswordHelper.Password="{Binding CheckPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" | ||||
@@ -284,23 +302,30 @@ | |||||
Foreground="#aadddddd" | Foreground="#aadddddd" | ||||
Style="{DynamicResource PasswordBoxStyle}" | Style="{DynamicResource PasswordBoxStyle}" | ||||
TabIndex="2" /> | TabIndex="2" /> | ||||
<TextBlock Grid.Row="2" Grid.Column="2" | |||||
HorizontalAlignment="Center" | |||||
FontSize="10" | |||||
VerticalAlignment="Center" | |||||
Foreground="#FF32B8FF" | |||||
Text="(默认888888)" Height="12" Width="62" /> | |||||
<TextBlock Grid.Row="4" Grid.ColumnSpan="3" Grid.Column="0" | |||||
<TextBlock | |||||
Grid.Row="2" | |||||
Grid.Column="2" | |||||
Width="62" | |||||
Height="12" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | VerticalAlignment="Center" | ||||
FontSize="10" | |||||
Foreground="#FF32B8FF" | |||||
Text="(默认888888)" /> | |||||
<TextBlock | |||||
Grid.Row="4" | |||||
Grid.Column="0" | |||||
Grid.ColumnSpan="3" | |||||
HorizontalAlignment="Center" | HorizontalAlignment="Center" | ||||
VerticalAlignment="Center" | |||||
FontSize="16" | FontSize="16" | ||||
Foreground="#FFF53F62" | Foreground="#FFF53F62" | ||||
Text="{Binding Info}" /> | Text="{Binding Info}" /> | ||||
</Grid> | </Grid> | ||||
<Grid Grid.Row="1"> | <Grid Grid.Row="1"> | ||||
<Grid.ColumnDefinitions> | <Grid.ColumnDefinitions> | ||||
@@ -308,24 +333,26 @@ | |||||
<ColumnDefinition /> | <ColumnDefinition /> | ||||
</Grid.ColumnDefinitions> | </Grid.ColumnDefinitions> | ||||
<Button VerticalAlignment="Center" | |||||
HorizontalAlignment="Center" | |||||
HorizontalContentAlignment="Center" | |||||
VerticalContentAlignment="Center" | |||||
Content="用户添加" | |||||
FontSize="16" | |||||
Style="{DynamicResource ButtonStyle}" | |||||
Command="{Binding UserAddCommand}"/> | |||||
<Button Grid.Column="1" | |||||
VerticalAlignment="Center" | |||||
HorizontalAlignment="Center" | |||||
HorizontalContentAlignment="Center" | |||||
VerticalContentAlignment="Center" | |||||
Content="用户注销" | |||||
FontSize="16" | |||||
Style="{DynamicResource ButtonStyle}" | |||||
Command="{Binding UserCancelCommand}"/> | |||||
<Button | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
HorizontalContentAlignment="Center" | |||||
VerticalContentAlignment="Center" | |||||
Command="{Binding UserAddCommand}" | |||||
Content="用户添加" | |||||
FontSize="16" | |||||
Style="{DynamicResource ButtonStyle}" /> | |||||
<Button | |||||
Grid.Column="1" | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
HorizontalContentAlignment="Center" | |||||
VerticalContentAlignment="Center" | |||||
Command="{Binding UserCancelCommand}" | |||||
Content="用户注销" | |||||
FontSize="16" | |||||
Style="{DynamicResource ButtonStyle}" /> | |||||
@@ -1,9 +1,8 @@ | |||||
<Application x:Class="BeDesignerSCADA.App" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:local="clr-namespace:BeDesignerSCADA" | |||||
StartupUri="MainWindow.xaml"> | |||||
<Application.Resources> | |||||
</Application.Resources> | |||||
<Application | |||||
x:Class="BeDesignerSCADA.App" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:local="clr-namespace:BeDesignerSCADA" | |||||
StartupUri="MainWindow.xaml"> | |||||
<Application.Resources /> | |||||
</Application> | </Application> |
@@ -1,31 +1,48 @@ | |||||
<UserControl x:Class="BeDesignerSCADA.Controls.RunCanvas" | |||||
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:BeDesignerSCADA.Controls" | |||||
xmlns:con="clr-namespace:BeDesignerSCADA.Converters" | |||||
mc:Ignorable="d" | |||||
d:DesignHeight="450" d:DesignWidth="800"> | |||||
<UserControl | |||||
x:Class="BeDesignerSCADA.Controls.RunCanvas" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:con="clr-namespace:BeDesignerSCADA.Converters" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:local="clr-namespace:BeDesignerSCADA.Controls" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
d:DesignHeight="450" | |||||
d:DesignWidth="800" | |||||
mc:Ignorable="d"> | |||||
<UserControl.Resources> | <UserControl.Resources> | ||||
<con:ZoomConverter x:Key="ZoomX" IsHeight="False"/> | |||||
<con:ZoomConverter x:Key="ZoomY" IsHeight="True"/> | |||||
<con:ZoomConverter x:Key="ZoomX" IsHeight="False" /> | |||||
<con:ZoomConverter x:Key="ZoomY" IsHeight="True" /> | |||||
</UserControl.Resources> | </UserControl.Resources> | ||||
<Grid ClipToBounds="True"> | |||||
<Canvas x:Name="RootCanvas" ClipToBounds="True" Background="Transparent" MouseLeftButtonUp="RootCanvas_MouseLeftButtonUp" | |||||
MouseMove="RootCanvas_MouseMove" MouseLeftButtonDown="RootCanvas_MouseLeftButtoDown" MouseWheel="RootCanvas_MouseWheel"> | |||||
<Grid ClipToBounds="True"> | |||||
<Canvas | |||||
x:Name="RootCanvas" | |||||
Background="Transparent" | |||||
ClipToBounds="True" | |||||
MouseLeftButtonDown="RootCanvas_MouseLeftButtoDown" | |||||
MouseLeftButtonUp="RootCanvas_MouseLeftButtonUp" | |||||
MouseMove="RootCanvas_MouseMove" | |||||
MouseWheel="RootCanvas_MouseWheel"> | |||||
<Canvas.RenderTransform> | <Canvas.RenderTransform> | ||||
<TransformGroup> | <TransformGroup> | ||||
<ScaleTransform x:Name="Scale"/> | |||||
<TranslateTransform x:Name="Translate"/> | |||||
<ScaleTransform x:Name="Scale" /> | |||||
<TranslateTransform x:Name="Translate" /> | |||||
</TransformGroup> | </TransformGroup> | ||||
</Canvas.RenderTransform> | </Canvas.RenderTransform> | ||||
</Canvas> | </Canvas> | ||||
<Grid VerticalAlignment="Bottom" Background="#4B959595"> | <Grid VerticalAlignment="Bottom" Background="#4B959595"> | ||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="8 0"> | |||||
<CheckBox x:Name="DragEnable" Content="拖动" Margin="4"/> | |||||
<CheckBox x:Name="ZoomEnable" Content="缩放" Margin="4"/> | |||||
<StackPanel | |||||
Margin="8,0" | |||||
HorizontalAlignment="Right" | |||||
Orientation="Horizontal"> | |||||
<CheckBox | |||||
x:Name="DragEnable" | |||||
Margin="4" | |||||
Content="拖动" /> | |||||
<CheckBox | |||||
x:Name="ZoomEnable" | |||||
Margin="4" | |||||
Content="缩放" /> | |||||
</StackPanel> | </StackPanel> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -1,81 +1,119 @@ | |||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks" | |||||
xmlns:con="clr-namespace:BeDesignerSCADA.Converters" | |||||
xmlns:dxmvmm="clr-namespace:BeDesignerSCADA.Converters" | |||||
xmlns:input="clr-namespace:System.Windows.Input;assembly=PresentationCore" | |||||
xmlns:ctrl="clr-namespace:BeDesignerSCADA.CustomerControls"> | |||||
<!--#region 主题笔刷 --> | |||||
<ResourceDictionary | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:con="clr-namespace:BeDesignerSCADA.Converters" | |||||
xmlns:ctrl="clr-namespace:BeDesignerSCADA.CustomerControls" | |||||
xmlns:dxmvmm="clr-namespace:BeDesignerSCADA.Converters" | |||||
xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks" | |||||
xmlns:input="clr-namespace:System.Windows.Input;assembly=PresentationCore"> | |||||
<!--#region 主题笔刷--> | |||||
<LinearGradientBrush x:Key="NormalBackground" StartPoint="0.5,0" EndPoint="0.5,1"> | <LinearGradientBrush x:Key="NormalBackground" StartPoint="0.5,0" EndPoint="0.5,1"> | ||||
<GradientStopCollection> | <GradientStopCollection> | ||||
<GradientStop Color="White" /> | <GradientStop Color="White" /> | ||||
<GradientStop Color="#D0D0D0" Offset="0.5"/> | |||||
<GradientStop Color="#E3E3E3" Offset="1"/> | |||||
<GradientStop Offset="0.5" Color="#D0D0D0" /> | |||||
<GradientStop Offset="1" Color="#E3E3E3" /> | |||||
</GradientStopCollection> | </GradientStopCollection> | ||||
</LinearGradientBrush> | </LinearGradientBrush> | ||||
<SolidColorBrush x:Key="AccentBrush" Color="#2B79E2"/> | |||||
<SolidColorBrush x:Key="ControlBorderBrush" Color="LightGray"/> | |||||
<SolidColorBrush x:Key="ControlBackground" Color="White"/> | |||||
<SolidColorBrush x:Key="ControlForeground" Color="Black"/> | |||||
<SolidColorBrush x:Key="AccentBrush" Color="#2B79E2" /> | |||||
<SolidColorBrush x:Key="ControlBorderBrush" Color="LightGray" /> | |||||
<SolidColorBrush x:Key="ControlBackground" Color="White" /> | |||||
<SolidColorBrush x:Key="ControlForeground" Color="Black" /> | |||||
<!--#endregion--> | <!--#endregion--> | ||||
<!--#region 转换器 --> | |||||
<con:HalfNumberConverter x:Key="HalfNumber"/> | |||||
<!--#region 转换器--> | |||||
<con:HalfNumberConverter x:Key="HalfNumber" /> | |||||
<!--#endregion--> | <!--#endregion--> | ||||
<!--#region 编辑模板 --> | |||||
<!--#region 编辑模板--> | |||||
<DataTemplate x:Key="EventEditTemplate"> | <DataTemplate x:Key="EventEditTemplate"> | ||||
<DockPanel Height="24"> | <DockPanel Height="24"> | ||||
<Button DockPanel.Dock="Right" Command="{Binding DataContext.EditCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}" | |||||
Content="..." CommandParameter="{Binding .}" Margin="2"/> | |||||
<TextBlock Text="{Binding Value}" VerticalAlignment="Center" Margin="4 0 0 0"/> | |||||
<Button | |||||
Margin="2" | |||||
Command="{Binding DataContext.EditCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" | |||||
CommandParameter="{Binding .}" | |||||
Content="..." | |||||
DockPanel.Dock="Right" /> | |||||
<TextBlock | |||||
Margin="4,0,0,0" | |||||
VerticalAlignment="Center" | |||||
Text="{Binding Value}" /> | |||||
</DockPanel> | </DockPanel> | ||||
</DataTemplate> | </DataTemplate> | ||||
<DataTemplate x:Key="ListEditTemplate"> | <DataTemplate x:Key="ListEditTemplate"> | ||||
<DockPanel MaxHeight="100"> | <DockPanel MaxHeight="100"> | ||||
<DockPanel DockPanel.Dock="Top"> | <DockPanel DockPanel.Dock="Top"> | ||||
<Button DockPanel.Dock="Right" Command="{Binding Value.AddCommand}" | |||||
CommandParameter="{Binding ElementName=AddTxt, Path=Text}" Margin="2" Padding="2"> | |||||
<icon:PackIconModern Kind="EditAdd"/> | |||||
<Button | |||||
Margin="2" | |||||
Padding="2" | |||||
Command="{Binding Value.AddCommand}" | |||||
CommandParameter="{Binding ElementName=AddTxt, Path=Text}" | |||||
DockPanel.Dock="Right"> | |||||
<icon:PackIconModern Kind="EditAdd" /> | |||||
</Button> | </Button> | ||||
<Button DockPanel.Dock="Right" Command="{Binding Value.DeleteCommand}" | |||||
CommandParameter="{Binding ElementName=list, Path=SelectedItem}" Margin="2" Padding="2"> | |||||
<Button | |||||
Margin="2" | |||||
Padding="2" | |||||
Command="{Binding Value.DeleteCommand}" | |||||
CommandParameter="{Binding ElementName=list, Path=SelectedItem}" | |||||
DockPanel.Dock="Right"> | |||||
<icon:PackIconModern Kind="Delete" /> | <icon:PackIconModern Kind="Delete" /> | ||||
</Button> | </Button> | ||||
<TextBox x:Name="AddTxt" Margin="2"/> | |||||
<TextBox x:Name="AddTxt" Margin="2" /> | |||||
</DockPanel> | </DockPanel> | ||||
<ListBox x:Name="list" ItemsSource="{Binding Value}" Margin="2"/> | |||||
<ListBox | |||||
x:Name="list" | |||||
Margin="2" | |||||
ItemsSource="{Binding Value}" /> | |||||
</DockPanel> | </DockPanel> | ||||
</DataTemplate> | </DataTemplate> | ||||
<DataTemplate x:Key="ImagePathEditTemplate"> | <DataTemplate x:Key="ImagePathEditTemplate"> | ||||
<DockPanel> | <DockPanel> | ||||
<Button DockPanel.Dock="Right" Content="..." Padding="0" Margin="2" Width="20" Height="20" | |||||
Command="{Binding DataContext.SelectPathCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}" CommandParameter="{Binding .}"/> | |||||
<TextBox DockPanel.Dock="Right" x:Name="AddTxt" Text="{Binding Value}" BorderThickness="0"/> | |||||
<Button | |||||
Width="20" | |||||
Height="20" | |||||
Margin="2" | |||||
Padding="0" | |||||
Command="{Binding DataContext.SelectPathCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" | |||||
CommandParameter="{Binding .}" | |||||
Content="..." | |||||
DockPanel.Dock="Right" /> | |||||
<TextBox | |||||
x:Name="AddTxt" | |||||
BorderThickness="0" | |||||
DockPanel.Dock="Right" | |||||
Text="{Binding Value}" /> | |||||
</DockPanel> | </DockPanel> | ||||
</DataTemplate> | </DataTemplate> | ||||
<!--#endregion--> | <!--#endregion--> | ||||
<!--#region 为某些获取焦点的控件设计设计时样式 --> | |||||
<Style TargetType="ComboBox" x:Key="DesignComboBox"> | |||||
<!--#region 为某些获取焦点的控件设计设计时样式--> | |||||
<Style x:Key="DesignComboBox" TargetType="ComboBox"> | |||||
<Setter Property="Focusable" Value="False" /> | <Setter Property="Focusable" Value="False" /> | ||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="ComboBox"> | <ControlTemplate TargetType="ComboBox"> | ||||
<Border BorderThickness="1" BorderBrush="{StaticResource ControlBorderBrush}"> | |||||
<Border BorderBrush="{StaticResource ControlBorderBrush}" BorderThickness="1"> | |||||
<Grid> | <Grid> | ||||
<Grid.ColumnDefinitions> | <Grid.ColumnDefinitions> | ||||
<ColumnDefinition/> | |||||
<ColumnDefinition Width="auto"/> | |||||
<ColumnDefinition /> | |||||
<ColumnDefinition Width="auto" /> | |||||
</Grid.ColumnDefinitions> | </Grid.ColumnDefinitions> | ||||
<Border Background="{StaticResource ControlBackground}"/> | |||||
<Border Grid.Column="1" Background="{StaticResource ControlBackground}" BorderThickness="0" IsEnabled="False"> | |||||
<Path Data="M0,0 8,0 4,4z" Fill="{StaticResource ControlForeground}" Margin="3" VerticalAlignment="Center"/> | |||||
<Border Background="{StaticResource ControlBackground}" /> | |||||
<Border | |||||
Grid.Column="1" | |||||
Background="{StaticResource ControlBackground}" | |||||
BorderThickness="0" | |||||
IsEnabled="False"> | |||||
<Path | |||||
Margin="3" | |||||
VerticalAlignment="Center" | |||||
Data="M0,0 8,0 4,4z" | |||||
Fill="{StaticResource ControlForeground}" /> | |||||
</Border> | </Border> | ||||
</Grid> | </Grid> | ||||
</Border> | </Border> | ||||
@@ -89,7 +127,7 @@ | |||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="Button"> | <ControlTemplate TargetType="Button"> | ||||
<Border BorderThickness="1" BorderBrush="{StaticResource ControlBorderBrush}" Background="{StaticResource ControlBackground}"> | <Border BorderThickness="1" BorderBrush="{StaticResource ControlBorderBrush}" Background="{StaticResource ControlBackground}"> | ||||
<TextBlock Text="{TemplateBinding Content}" FontSize="{TemplateBinding FontSize}" | |||||
<TextBlock Text="{TemplateBinding Content}" FontSize="{TemplateBinding FontSize}" | |||||
FontWeight="{TemplateBinding FontWeight}" HorizontalAlignment="Center" VerticalAlignment="Center"/> | FontWeight="{TemplateBinding FontWeight}" HorizontalAlignment="Center" VerticalAlignment="Center"/> | ||||
</Border> | </Border> | ||||
</ControlTemplate> | </ControlTemplate> | ||||
@@ -97,39 +135,56 @@ | |||||
</Setter> | </Setter> | ||||
</Style>--> | </Style>--> | ||||
<Style TargetType="ToggleButton" x:Key="DesignToggleButton"> | |||||
<Style x:Key="DesignToggleButton" TargetType="ToggleButton"> | |||||
<Setter Property="Foreground" Value="{StaticResource ControlForeground}" /> | <Setter Property="Foreground" Value="{StaticResource ControlForeground}" /> | ||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="ToggleButton"> | <ControlTemplate TargetType="ToggleButton"> | ||||
<Border BorderThickness="1" Background="{StaticResource NormalBackground}" BorderBrush="{StaticResource ControlBorderBrush}" CornerRadius="2"> | |||||
<TextBlock Text="{TemplateBinding Content}" FontSize="{TemplateBinding FontSize}" | |||||
FontWeight="{TemplateBinding FontWeight}" HorizontalAlignment="Center" VerticalAlignment="Center"/> | |||||
<Border | |||||
Background="{StaticResource NormalBackground}" | |||||
BorderBrush="{StaticResource ControlBorderBrush}" | |||||
BorderThickness="1" | |||||
CornerRadius="2"> | |||||
<TextBlock | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="{TemplateBinding FontSize}" | |||||
FontWeight="{TemplateBinding FontWeight}" | |||||
Text="{TemplateBinding Content}" /> | |||||
</Border> | </Border> | ||||
</ControlTemplate> | </ControlTemplate> | ||||
</Setter.Value> | </Setter.Value> | ||||
</Setter> | </Setter> | ||||
</Style> | </Style> | ||||
<Style TargetType="ToggleButton" x:Key="ExecuteToggleButton"> | |||||
<Style x:Key="ExecuteToggleButton" TargetType="ToggleButton"> | |||||
<Setter Property="Foreground" Value="{StaticResource ControlForeground}" /> | <Setter Property="Foreground" Value="{StaticResource ControlForeground}" /> | ||||
<Setter Property="Foreground" Value="{StaticResource ControlForeground}" /> | <Setter Property="Foreground" Value="{StaticResource ControlForeground}" /> | ||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="ToggleButton"> | <ControlTemplate TargetType="ToggleButton"> | ||||
<Border x:Name="bd" BorderThickness="1" Background="{StaticResource NormalBackground}" BorderBrush="{StaticResource ControlBorderBrush}" CornerRadius="2"> | |||||
<TextBlock Text="{TemplateBinding Content}" FontSize="{TemplateBinding FontSize}" | |||||
FontWeight="{TemplateBinding FontWeight}" HorizontalAlignment="Center" VerticalAlignment="Center"/> | |||||
<Border | |||||
x:Name="bd" | |||||
Background="{StaticResource NormalBackground}" | |||||
BorderBrush="{StaticResource ControlBorderBrush}" | |||||
BorderThickness="1" | |||||
CornerRadius="2"> | |||||
<TextBlock | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
FontSize="{TemplateBinding FontSize}" | |||||
FontWeight="{TemplateBinding FontWeight}" | |||||
Text="{TemplateBinding Content}" /> | |||||
</Border> | </Border> | ||||
<ControlTemplate.Triggers> | <ControlTemplate.Triggers> | ||||
<Trigger Property="IsChecked" Value="True"> | <Trigger Property="IsChecked" Value="True"> | ||||
<Setter Property="Background" TargetName="bd"> | |||||
<Setter TargetName="bd" Property="Background"> | |||||
<Setter.Value> | <Setter.Value> | ||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> | <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> | ||||
<GradientStopCollection> | <GradientStopCollection> | ||||
<GradientStop Color="#6AD456" /> | <GradientStop Color="#6AD456" /> | ||||
<GradientStop Color="#1DAE06" Offset="0.5"/> | |||||
<GradientStop Color="#8BDC7C" Offset="1"/> | |||||
<GradientStop Offset="0.5" Color="#1DAE06" /> | |||||
<GradientStop Offset="1" Color="#8BDC7C" /> | |||||
</GradientStopCollection> | </GradientStopCollection> | ||||
</LinearGradientBrush> | </LinearGradientBrush> | ||||
</Setter.Value> | </Setter.Value> | ||||
@@ -145,146 +200,156 @@ | |||||
<DataTemplate x:Key="ToolBoxStyle"> | <DataTemplate x:Key="ToolBoxStyle"> | ||||
<Grid Margin="2" Background="Transparent"> | <Grid Margin="2" Background="Transparent"> | ||||
<Grid.ColumnDefinitions> | <Grid.ColumnDefinitions> | ||||
<ColumnDefinition Width="30"/> | |||||
<ColumnDefinition/> | |||||
<ColumnDefinition Width="30" /> | |||||
<ColumnDefinition /> | |||||
</Grid.ColumnDefinitions> | </Grid.ColumnDefinitions> | ||||
<icon:PackIconMaterial x:Name="icon" Kind="Ellipse" BorderThickness="1" VerticalAlignment="Stretch" Width="24" HorizontalAlignment="Stretch"/> | |||||
<TextBlock x:Name="txt" Grid.Column="1" Text="{Binding Name}" Margin="4"/> | |||||
<icon:PackIconMaterial | |||||
x:Name="icon" | |||||
Width="24" | |||||
HorizontalAlignment="Stretch" | |||||
VerticalAlignment="Stretch" | |||||
BorderThickness="1" | |||||
Kind="Ellipse" /> | |||||
<TextBlock | |||||
x:Name="txt" | |||||
Grid.Column="1" | |||||
Margin="4" | |||||
Text="{Binding Name}" /> | |||||
</Grid> | </Grid> | ||||
<DataTemplate.Triggers> | <DataTemplate.Triggers> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheButton"> | <DataTrigger Binding="{Binding Name}" Value="TheButton"> | ||||
<Setter Property="Kind" TargetName="icon" Value="GestureTapButton"/> | |||||
<Setter Property="Text" TargetName="txt" Value="按钮"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="GestureTapButton" /> | |||||
<Setter TargetName="txt" Property="Text" Value="按钮" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheTimer"> | <DataTrigger Binding="{Binding Name}" Value="TheTimer"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Timer"/> | |||||
<Setter Property="Text" TargetName="txt" Value="计时器"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Timer" /> | |||||
<Setter TargetName="txt" Property="Text" Value="计时器" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheCheckBox"> | <DataTrigger Binding="{Binding Name}" Value="TheCheckBox"> | ||||
<Setter Property="Kind" TargetName="icon" Value="CheckboxMarked"/> | |||||
<Setter Property="Text" TargetName="txt" Value="勾选框"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="CheckboxMarked" /> | |||||
<Setter TargetName="txt" Property="Text" Value="勾选框" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="DigitalNumber"> | <DataTrigger Binding="{Binding Name}" Value="DigitalNumber"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LedStrip"/> | |||||
<Setter Property="Text" TargetName="txt" Value="液晶数字"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LedStrip" /> | |||||
<Setter TargetName="txt" Property="Text" Value="液晶数字" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheComboBox"> | <DataTrigger Binding="{Binding Name}" Value="TheComboBox"> | ||||
<Setter Property="Kind" TargetName="icon" Value="ViewList"/> | |||||
<Setter Property="Text" TargetName="txt" Value="下拉框"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="ViewList" /> | |||||
<Setter TargetName="txt" Property="Text" Value="下拉框" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheImage"> | <DataTrigger Binding="{Binding Name}" Value="TheImage"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Image"/> | |||||
<Setter Property="Text" TargetName="txt" Value="图片"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Image" /> | |||||
<Setter TargetName="txt" Property="Text" Value="图片" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheTextBlock"> | <DataTrigger Binding="{Binding Name}" Value="TheTextBlock"> | ||||
<Setter Property="Kind" TargetName="icon" Value="TagText"/> | |||||
<Setter Property="Text" TargetName="txt" Value="文本块"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="TagText" /> | |||||
<Setter TargetName="txt" Property="Text" Value="文本块" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="ArcGauge"> | <DataTrigger Binding="{Binding Name}" Value="ArcGauge"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Gauge"/> | |||||
<Setter Property="Text" TargetName="txt" Value="仪表盘"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Gauge" /> | |||||
<Setter TargetName="txt" Property="Text" Value="仪表盘" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="StatusLight"> | <DataTrigger Binding="{Binding Name}" Value="StatusLight"> | ||||
<Setter Property="Kind" TargetName="icon" Value="CeilingLight"/> | |||||
<Setter Property="Text" TargetName="txt" Value="状态灯"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="CeilingLight" /> | |||||
<Setter TargetName="txt" Property="Text" Value="状态灯" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheToggleButton"> | <DataTrigger Binding="{Binding Name}" Value="TheToggleButton"> | ||||
<Setter Property="Kind" TargetName="icon" Value="CheckOutline"/> | |||||
<Setter Property="Text" TargetName="txt" Value="开关按钮"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="CheckOutline" /> | |||||
<Setter TargetName="txt" Property="Text" Value="开关按钮" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheGroupBox"> | <DataTrigger Binding="{Binding Name}" Value="TheGroupBox"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Group"/> | |||||
<Setter Property="Text" TargetName="txt" Value="分组"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Group" /> | |||||
<Setter TargetName="txt" Property="Text" Value="分组" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheTextBox"> | <DataTrigger Binding="{Binding Name}" Value="TheTextBox"> | ||||
<Setter Property="Kind" TargetName="icon" Value="TextBox"/> | |||||
<Setter Property="Text" TargetName="txt" Value="文本框"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="TextBox" /> | |||||
<Setter TargetName="txt" Property="Text" Value="文本框" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="NumberBox"> | <DataTrigger Binding="{Binding Name}" Value="NumberBox"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Numeric8Box"/> | |||||
<Setter Property="Text" TargetName="txt" Value="数值框"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Numeric8Box" /> | |||||
<Setter TargetName="txt" Property="Text" Value="数值框" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="GraphArrow"> | <DataTrigger Binding="{Binding Name}" Value="GraphArrow"> | ||||
<Setter Property="Kind" TargetName="icon" Value="ArrowRightBold"/> | |||||
<Setter Property="Text" TargetName="txt" Value="箭头"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="ArrowRightBold" /> | |||||
<Setter TargetName="txt" Property="Text" Value="箭头" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="GraphStar"> | <DataTrigger Binding="{Binding Name}" Value="GraphStar"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Star"/> | |||||
<Setter Property="Text" TargetName="txt" Value="五角星"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Star" /> | |||||
<Setter TargetName="txt" Property="Text" Value="五角星" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheSlider"> | <DataTrigger Binding="{Binding Name}" Value="TheSlider"> | ||||
<Setter Property="Kind" TargetName="icon" Value="ArrowDownBold"/> | |||||
<Setter Property="Text" TargetName="txt" Value="滑块"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="ArrowDownBold" /> | |||||
<Setter TargetName="txt" Property="Text" Value="滑块" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheRadioButton"> | <DataTrigger Binding="{Binding Name}" Value="TheRadioButton"> | ||||
<Setter Property="Kind" TargetName="icon" Value="RadioboxMarked"/> | |||||
<Setter Property="Text" TargetName="txt" Value="单选按钮"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="RadioboxMarked" /> | |||||
<Setter TargetName="txt" Property="Text" Value="单选按钮" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="SwitchButton"> | <DataTrigger Binding="{Binding Name}" Value="SwitchButton"> | ||||
<Setter Property="Kind" TargetName="icon" Value="ToggleSwitch"/> | |||||
<Setter Property="Text" TargetName="txt" Value="开关"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="ToggleSwitch" /> | |||||
<Setter TargetName="txt" Property="Text" Value="开关" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="KnobButton"> | <DataTrigger Binding="{Binding Name}" Value="KnobButton"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Ellipse"/> | |||||
<Setter Property="Text" TargetName="txt" Value="旋钮"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Ellipse" /> | |||||
<Setter TargetName="txt" Property="Text" Value="旋钮" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="Silos"> | <DataTrigger Binding="{Binding Name}" Value="Silos"> | ||||
<Setter Property="Kind" TargetName="icon" Value="StoreSettings"/> | |||||
<Setter Property="Text" TargetName="txt" Value="物料仓"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="StoreSettings" /> | |||||
<Setter TargetName="txt" Property="Text" Value="物料仓" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="NewConveyorBelt"> | <DataTrigger Binding="{Binding Name}" Value="NewConveyorBelt"> | ||||
<Setter Property="Kind" TargetName="icon" Value="ArrowLeftRightBoldOutline"/> | |||||
<Setter Property="Text" TargetName="txt" Value="滚动线"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="ArrowLeftRightBoldOutline" /> | |||||
<Setter TargetName="txt" Property="Text" Value="滚动线" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheDataGrid"> | <DataTrigger Binding="{Binding Name}" Value="TheDataGrid"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LineScan"/> | |||||
<Setter Property="Text" TargetName="txt" Value="表格"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LineScan" /> | |||||
<Setter TargetName="txt" Property="Text" Value="表格" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheListBox"> | <DataTrigger Binding="{Binding Name}" Value="TheListBox"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LineScan"/> | |||||
<Setter Property="Text" TargetName="txt" Value="列表控件"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LineScan" /> | |||||
<Setter TargetName="txt" Property="Text" Value="列表控件" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheRedis"> | <DataTrigger Binding="{Binding Name}" Value="TheRedis"> | ||||
<Setter Property="Kind" TargetName="icon" Value="AlphaDBoxOutline"/> | |||||
<Setter Property="Text" TargetName="txt" Value="Redis控件"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="AlphaDBoxOutline" /> | |||||
<Setter TargetName="txt" Property="Text" Value="Redis控件" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="WaveProgressBar"> | <DataTrigger Binding="{Binding Name}" Value="WaveProgressBar"> | ||||
<Setter Property="Kind" TargetName="icon" Value="Wave"/> | |||||
<Setter Property="Text" TargetName="txt" Value="进度条波浪"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="Wave" /> | |||||
<Setter TargetName="txt" Property="Text" Value="进度条波浪" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheProgressBar"> | <DataTrigger Binding="{Binding Name}" Value="TheProgressBar"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LineScan"/> | |||||
<Setter Property="Text" TargetName="txt" Value="进度条正常"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LineScan" /> | |||||
<Setter TargetName="txt" Property="Text" Value="进度条正常" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheRedProgressBar"> | <DataTrigger Binding="{Binding Name}" Value="TheRedProgressBar"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LineScan"/> | |||||
<Setter Property="Text" TargetName="txt" Value="进度条圆形红"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LineScan" /> | |||||
<Setter TargetName="txt" Property="Text" Value="进度条圆形红" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheBlueProgressBar"> | <DataTrigger Binding="{Binding Name}" Value="TheBlueProgressBar"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LineScan"/> | |||||
<Setter Property="Text" TargetName="txt" Value="进度条圆形蓝"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LineScan" /> | |||||
<Setter TargetName="txt" Property="Text" Value="进度条圆形蓝" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheGreenProgressBar"> | <DataTrigger Binding="{Binding Name}" Value="TheGreenProgressBar"> | ||||
<Setter Property="Kind" TargetName="icon" Value="LineScan"/> | |||||
<Setter Property="Text" TargetName="txt" Value="进度条圆形绿"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="LineScan" /> | |||||
<Setter TargetName="txt" Property="Text" Value="进度条圆形绿" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheAPI"> | <DataTrigger Binding="{Binding Name}" Value="TheAPI"> | ||||
<Setter Property="Kind" TargetName="icon" Value="AlphaABoxOutline"/> | |||||
<Setter Property="Text" TargetName="txt" Value="API接口"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="AlphaABoxOutline" /> | |||||
<Setter TargetName="txt" Property="Text" Value="API接口" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
<DataTrigger Binding="{Binding Name}" Value="TheMQTT"> | <DataTrigger Binding="{Binding Name}" Value="TheMQTT"> | ||||
<Setter Property="Kind" TargetName="icon" Value="AlphaMBoxOutline"/> | |||||
<Setter Property="Text" TargetName="txt" Value="MQTT"/> | |||||
<Setter TargetName="icon" Property="Kind" Value="AlphaMBoxOutline" /> | |||||
<Setter TargetName="txt" Property="Text" Value="MQTT" /> | |||||
</DataTrigger> | </DataTrigger> | ||||
</DataTemplate.Triggers> | </DataTemplate.Triggers> | ||||
@@ -295,48 +360,78 @@ | |||||
</FontFamily> | </FontFamily> | ||||
<!--#region 右键菜单--> | <!--#region 右键菜单--> | ||||
<ContextMenu x:Key="CanvasRightMenu" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}" FontFamily="Microsoft YaHei Ui"> | |||||
<MenuItem Header="复制" Command="{Binding CopySelectItemsCommand}"> | |||||
<ContextMenu | |||||
x:Key="CanvasRightMenu" | |||||
DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}" | |||||
FontFamily="Microsoft YaHei Ui"> | |||||
<MenuItem Command="{Binding CopySelectItemsCommand}" Header="复制"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconModern Kind="PageCopy" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconModern | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="PageCopy" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
<MenuItem Header="粘贴" Command="{Binding PasteSelectItemsCommand}"> | |||||
<MenuItem Command="{Binding PasteSelectItemsCommand}" Header="粘贴"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconModern Kind="ClipboardPaste" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconModern | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="ClipboardPaste" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
<MenuItem Header="删除" Command="{Binding DeleteSelectItemsCommand}"> | |||||
<MenuItem Command="{Binding DeleteSelectItemsCommand}" Header="删除"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconModern Kind="Delete" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconModern | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="Delete" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
</ContextMenu> | </ContextMenu> | ||||
<ContextMenu x:Key="AdornerRightMenu" DataContext="{Binding PlacementTarget.Tag,RelativeSource={RelativeSource Mode=Self}}" FontFamily="Microsoft YaHei Ui"> | |||||
<MenuItem Header="复制" Command="{Binding CopySelectItemsCommand}"> | |||||
<ContextMenu | |||||
x:Key="AdornerRightMenu" | |||||
DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Mode=Self}}" | |||||
FontFamily="Microsoft YaHei Ui"> | |||||
<MenuItem Command="{Binding CopySelectItemsCommand}" Header="复制"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconModern Kind="PageCopy" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconModern | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="PageCopy" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
<MenuItem Header="粘贴" Command="{Binding PasteSelectItemsCommand}"> | |||||
<MenuItem Command="{Binding PasteSelectItemsCommand}" Header="粘贴"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconModern Kind="ClipboardPaste" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconModern | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="ClipboardPaste" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
<MenuItem Header="删除" Command="{Binding DeleteSelectItemsCommand}"> | |||||
<MenuItem Command="{Binding DeleteSelectItemsCommand}" Header="删除"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconModern Kind="Delete" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconModern | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="Delete" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
<MenuItem Header="置于顶层" Command="{Binding SetTopLayerCommand}"> | |||||
<MenuItem Command="{Binding SetTopLayerCommand}" Header="置于顶层"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconMaterial Kind="ArrangeSendToBack" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconMaterial | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="ArrangeSendToBack" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
<MenuItem Header="置于底层" Command="{Binding SetBottomLayerCommand}"> | |||||
<MenuItem Command="{Binding SetBottomLayerCommand}" Header="置于底层"> | |||||
<MenuItem.Icon> | <MenuItem.Icon> | ||||
<icon:PackIconMaterial Kind="ArrangeBringToFront" HorizontalAlignment="Center" Width="10"/> | |||||
<icon:PackIconMaterial | |||||
Width="10" | |||||
HorizontalAlignment="Center" | |||||
Kind="ArrangeBringToFront" /> | |||||
</MenuItem.Icon> | </MenuItem.Icon> | ||||
</MenuItem> | </MenuItem> | ||||
</ContextMenu> | </ContextMenu> | ||||
@@ -353,16 +448,16 @@ | |||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="ctrl:DigitalNumber"> | <ControlTemplate TargetType="ctrl:DigitalNumber"> | ||||
<Grid Background="{TemplateBinding Background}"> | <Grid Background="{TemplateBinding Background}"> | ||||
<TextBlock x:Name="line" VerticalAlignment="Center" HorizontalAlignment="Center" | |||||
<TextBlock x:Name="line" VerticalAlignment="Center" HorizontalAlignment="Center" | |||||
FontFamily="{StaticResource Digital}" FontSize="{TemplateBinding FontSize}" | FontFamily="{StaticResource Digital}" FontSize="{TemplateBinding FontSize}" | ||||
Text="{Binding NumberValue,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ctrl:DigitalNumber},Mode=TwoWay}" | |||||
Text="{Binding NumberValue,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ctrl:DigitalNumber},Mode=TwoWay}" | |||||
Foreground="{TemplateBinding Foreground}"/> | Foreground="{TemplateBinding Foreground}"/> | ||||
</Grid> | </Grid> | ||||
</ControlTemplate> | </ControlTemplate> | ||||
</Setter.Value> | </Setter.Value> | ||||
</Setter> | </Setter> | ||||
</Style> | </Style> | ||||
<Style TargetType="{x:Type ctrl:TheTimer}"> | <Style TargetType="{x:Type ctrl:TheTimer}"> | ||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
@@ -540,7 +635,7 @@ | |||||
<StackPanel> | <StackPanel> | ||||
<Border Background="{TemplateBinding Background}"> | <Border Background="{TemplateBinding Background}"> | ||||
<Viewbox> | <Viewbox> | ||||
<Border x:Name="PART_Clip" BorderThickness="{TemplateBinding BorderThickness}" ClipToBounds="True" | |||||
<Border x:Name="PART_Clip" BorderThickness="{TemplateBinding BorderThickness}" ClipToBounds="True" | |||||
BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="100" Width="200" Height="200"> | BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="100" Width="200" Height="200"> | ||||
<Border.Clip> | <Border.Clip> | ||||
<EllipseGeometry RadiusX="100" RadiusY="100" Center="100,100"/> | <EllipseGeometry RadiusX="100" RadiusY="100" Center="100,100"/> | ||||
@@ -558,8 +653,8 @@ | |||||
</PathGeometry> | </PathGeometry> | ||||
</Path.Data> | </Path.Data> | ||||
</Path> | </Path> | ||||
<TextBlock Visibility="{Binding ShowText,RelativeSource={RelativeSource TemplatedParent},Converter={x:Static dxmvmm:BoolToVisibilityConverter.Instance}}" | |||||
HorizontalAlignment="Center" VerticalAlignment="Center" | |||||
<TextBlock Visibility="{Binding ShowText,RelativeSource={RelativeSource TemplatedParent},Converter={x:Static dxmvmm:BoolToVisibilityConverter.Instance}}" | |||||
HorizontalAlignment="Center" VerticalAlignment="Center" | |||||
Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}" | Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}" | ||||
Text="{Binding Value,RelativeSource={RelativeSource Mode=TemplatedParent},StringFormat={}{0:f2}%}"/> | Text="{Binding Value,RelativeSource={RelativeSource Mode=TemplatedParent},StringFormat={}{0:f2}%}"/> | ||||
</Grid> | </Grid> | ||||
@@ -589,10 +684,10 @@ | |||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="ctrl:SwitchButton"> | <ControlTemplate TargetType="ctrl:SwitchButton"> | ||||
<Border CornerRadius="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=ActualHeight,Converter={StaticResource HalfNumber}}" | |||||
<Border CornerRadius="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=ActualHeight,Converter={StaticResource HalfNumber}}" | |||||
BorderThickness="1" Background="{StaticResource ControlBackground}" BorderBrush="{TemplateBinding BorderBrush}"> | BorderThickness="1" Background="{StaticResource ControlBackground}" BorderBrush="{TemplateBinding BorderBrush}"> | ||||
<Grid> | <Grid> | ||||
<Ellipse x:Name="ELLIPSE" HorizontalAlignment="Left" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" | |||||
<Ellipse x:Name="ELLIPSE" HorizontalAlignment="Left" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" | |||||
Fill="Gray" Stroke="{StaticResource ControlBorderBrush}" StrokeThickness="1"> | Fill="Gray" Stroke="{StaticResource ControlBorderBrush}" StrokeThickness="1"> | ||||
<Ellipse.RenderTransform> | <Ellipse.RenderTransform> | ||||
<TransformGroup> | <TransformGroup> | ||||
@@ -630,7 +725,7 @@ | |||||
<Ellipse Margin="12" Fill="{TemplateBinding Background}" Width="8" Height="8" VerticalAlignment="Bottom"> | <Ellipse Margin="12" Fill="{TemplateBinding Background}" Width="8" Height="8" VerticalAlignment="Bottom"> | ||||
</Ellipse> | </Ellipse> | ||||
</Grid> | </Grid> | ||||
<TextBlock Text="{Binding Value,RelativeSource={RelativeSource Mode=TemplatedParent}, StringFormat={}{0:F2}}" | |||||
<TextBlock Text="{Binding Value,RelativeSource={RelativeSource Mode=TemplatedParent}, StringFormat={}{0:F2}}" | |||||
VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}"/> | VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}"/> | ||||
</Grid> | </Grid> | ||||
</ControlTemplate> | </ControlTemplate> | ||||
@@ -638,32 +733,44 @@ | |||||
</Setter> | </Setter> | ||||
</Style>--> | </Style>--> | ||||
<!--#endregion--> | <!--#endregion--> | ||||
<!--#region 控制集合--> | <!--#region 控制集合--> | ||||
<Style TargetType="{x:Type ToggleButton}" > | |||||
<Setter Property="Foreground" Value="White"/> | |||||
<Setter Property="FontFamily" Value="Microsoft YaHei"/> | |||||
<Setter Property="FontSize" Value="12"/> | |||||
<Setter Property="FontWeight" Value="Bold"/> | |||||
<Style TargetType="{x:Type ToggleButton}"> | |||||
<Setter Property="Foreground" Value="White" /> | |||||
<Setter Property="FontFamily" Value="Microsoft YaHei" /> | |||||
<Setter Property="FontSize" Value="12" /> | |||||
<Setter Property="FontWeight" Value="Bold" /> | |||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
<ControlTemplate TargetType="ToggleButton"> | <ControlTemplate TargetType="ToggleButton"> | ||||
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="0" CornerRadius="2"> | |||||
<Border | |||||
BorderBrush="{TemplateBinding Control.BorderBrush}" | |||||
BorderThickness="0" | |||||
CornerRadius="2"> | |||||
<Border.Background> | <Border.Background> | ||||
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> | |||||
<GradientStop Color="#FF71E0C6" Offset="0.0" /> | |||||
<GradientStop Color="#FF43A88D" Offset="0.2" /> | |||||
<GradientStop Color="#FF5BB07D" Offset="0.0" /> | |||||
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> | |||||
<GradientStop Offset="0.0" Color="#FF71E0C6" /> | |||||
<GradientStop Offset="0.2" Color="#FF43A88D" /> | |||||
<GradientStop Offset="0.0" Color="#FF5BB07D" /> | |||||
</LinearGradientBrush> | </LinearGradientBrush> | ||||
</Border.Background> | </Border.Background> | ||||
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter> | |||||
<ContentPresenter | |||||
HorizontalAlignment="Center" | |||||
VerticalAlignment="Center" | |||||
Content="{TemplateBinding ContentControl.Content}" /> | |||||
</Border> | </Border> | ||||
<ControlTemplate.Triggers> | <ControlTemplate.Triggers> | ||||
<Trigger Property="ButtonBase.IsPressed" Value="True"> | <Trigger Property="ButtonBase.IsPressed" Value="True"> | ||||
<Setter Property="UIElement.Effect"> | <Setter Property="UIElement.Effect"> | ||||
<Setter.Value> | <Setter.Value> | ||||
<DropShadowEffect BlurRadius="10" Color="#276AB0" Direction="0" Opacity="0.9" RenderingBias="Performance" ShadowDepth="0" /> | |||||
<DropShadowEffect | |||||
BlurRadius="10" | |||||
Direction="0" | |||||
Opacity="0.9" | |||||
RenderingBias="Performance" | |||||
ShadowDepth="0" | |||||
Color="#276AB0" /> | |||||
</Setter.Value> | </Setter.Value> | ||||
</Setter> | </Setter> | ||||
<Setter Property="RenderTransform"> | <Setter Property="RenderTransform"> | ||||
@@ -680,7 +787,10 @@ | |||||
</Setter> | </Setter> | ||||
</Style> | </Style> | ||||
<DataTemplate x:Key="Category"> | <DataTemplate x:Key="Category"> | ||||
<TextBlock Text="{Binding}" FontSize="20" Foreground="#4EB9E4" /> | |||||
<TextBlock | |||||
FontSize="20" | |||||
Foreground="#4EB9E4" | |||||
Text="{Binding}" /> | |||||
</DataTemplate> | </DataTemplate> | ||||
<!--#endregion--> | <!--#endregion--> | ||||
</ResourceDictionary> | </ResourceDictionary> |
@@ -178,6 +178,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BeDesignerSCADA", "BeDesign | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmart.RecipeManagement", "BPASmart.RecipeManagement\BPASmart.RecipeManagement.csproj", "{28EBFC11-184A-4B88-A7B3-84F3FD768520}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmart.RecipeManagement", "BPASmart.RecipeManagement\BPASmart.RecipeManagement.csproj", "{28EBFC11-184A-4B88-A7B3-84F3FD768520}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmart.SmallBatchingSystem", "BPASmart.SmallBatchingSystem\BPASmart.SmallBatchingSystem.csproj", "{DB6DC970-859C-4C63-AE9B-BA415D56CECD}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BPASmart.ConfigurationSoftware", "BPASmart.ConfigurationSoftware\BPASmart.ConfigurationSoftware.csproj", "{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}" | |||||
EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
@@ -1612,6 +1616,46 @@ Global | |||||
{28EBFC11-184A-4B88-A7B3-84F3FD768520}.Release|x64.Build.0 = Release|Any CPU | {28EBFC11-184A-4B88-A7B3-84F3FD768520}.Release|x64.Build.0 = Release|Any CPU | ||||
{28EBFC11-184A-4B88-A7B3-84F3FD768520}.Release|x86.ActiveCfg = Release|Any CPU | {28EBFC11-184A-4B88-A7B3-84F3FD768520}.Release|x86.ActiveCfg = Release|Any CPU | ||||
{28EBFC11-184A-4B88-A7B3-84F3FD768520}.Release|x86.Build.0 = Release|Any CPU | {28EBFC11-184A-4B88-A7B3-84F3FD768520}.Release|x86.Build.0 = Release|Any CPU | ||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|ARM.ActiveCfg = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|ARM.Build.0 = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|ARM64.ActiveCfg = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|ARM64.Build.0 = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|x64.ActiveCfg = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|x64.Build.0 = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|ARM.ActiveCfg = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|ARM.Build.0 = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|ARM64.ActiveCfg = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|ARM64.Build.0 = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|x64.ActiveCfg = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|x64.Build.0 = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD}.Release|x86.Build.0 = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|ARM.ActiveCfg = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|ARM.Build.0 = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|ARM64.ActiveCfg = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|ARM64.Build.0 = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|x64.ActiveCfg = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|x64.Build.0 = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|ARM.ActiveCfg = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|ARM.Build.0 = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|ARM64.ActiveCfg = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|ARM64.Build.0 = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|x64.ActiveCfg = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|x64.Build.0 = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9}.Release|x86.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -1694,6 +1738,8 @@ Global | |||||
{06F0B369-0483-46DD-82D2-70431FB505C1} = {7B0175AD-BB74-4A98-B9A7-1E289032485E} | {06F0B369-0483-46DD-82D2-70431FB505C1} = {7B0175AD-BB74-4A98-B9A7-1E289032485E} | ||||
{DF8B4C38-39DE-4220-AB60-885CAE6D1E47} = {06F0B369-0483-46DD-82D2-70431FB505C1} | {DF8B4C38-39DE-4220-AB60-885CAE6D1E47} = {06F0B369-0483-46DD-82D2-70431FB505C1} | ||||
{28EBFC11-184A-4B88-A7B3-84F3FD768520} = {CDC1E762-5E1D-4AE1-9DF2-B85761539086} | {28EBFC11-184A-4B88-A7B3-84F3FD768520} = {CDC1E762-5E1D-4AE1-9DF2-B85761539086} | ||||
{DB6DC970-859C-4C63-AE9B-BA415D56CECD} = {CDC1E762-5E1D-4AE1-9DF2-B85761539086} | |||||
{897F8379-3301-4CBE-9BCA-AF7FD2F963A9} = {CDC1E762-5E1D-4AE1-9DF2-B85761539086} | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(ExtensibilityGlobals) = postSolution | GlobalSection(ExtensibilityGlobals) = postSolution | ||||
SolutionGuid = {9AEC9B81-0222-4DE9-B642-D915C29222AC} | SolutionGuid = {9AEC9B81-0222-4DE9-B642-D915C29222AC} | ||||