修改了变量对话框的界面

This commit is contained in:
2025-08-24 12:25:44 +08:00
parent 614dfa4063
commit 8cd876c67d
3 changed files with 182 additions and 121 deletions

View File

@@ -66,14 +66,14 @@ public partial class VariableItemViewModel : ObservableObject
/// 获取或设置变量的信号类型 (如AI, DI, AO, DO)。 /// 获取或设置变量的信号类型 (如AI, DI, AO, DO)。
/// </summary> /// </summary>
[ObservableProperty] [ObservableProperty]
private SignalType _signalType ; private SignalType _signalType =SignalType.OtherASignal;
/// <summary> /// <summary>
/// 获取或设置变量的轮询等级。 /// 获取或设置变量的轮询等级。
/// 用于决定数据采集的频率(如:高、中、低)。 /// 用于决定数据采集的频率(如:高、中、低)。
/// </summary> /// </summary>
[ObservableProperty] [ObservableProperty]
private PollLevelType _pollLevel; private PollLevelType _pollLevel=PollLevelType.ThirtySeconds;
/// <summary> /// <summary>
/// 获取或设置一个值,该值指示此变量是否被激活。 /// 获取或设置一个值,该值指示此变量是否被激活。

View File

@@ -1,131 +1,193 @@
<ui:ContentDialog x:Class="DMS.WPF.Views.Dialogs.VariableDialog" <ui:ContentDialog
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x:Class="DMS.WPF.Views.Dialogs.VariableDialog"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 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:ikw="http://schemas.inkore.net/lib/ui/wpf" xmlns:en="clr-namespace:DMS.Core.Enums;assembly=DMS.Core"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern" xmlns:enums="clr-namespace:DMS.Core.Enums;assembly=DMS.Core"
xmlns:vmd="clr-namespace:DMS.WPF.ViewModels.Dialogs" xmlns:ex="clr-namespace:DMS.Extensions"
xmlns:ex="clr-namespace:DMS.Extensions" xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:en="clr-namespace:DMS.Core.Enums;assembly=DMS.Core" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:enums="clr-namespace:DMS.Core.Enums;assembly=DMS.Core" xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts" xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
Title="{Binding Title}" xmlns:vmd="clr-namespace:DMS.WPF.ViewModels.Dialogs"
CloseButtonText="取消" Title="{Binding Title}"
DefaultButton="Primary" d:DataContext="{d:DesignInstance vmd:VariableDialogViewModel}"
PrimaryButtonText="{Binding PrimaryButText}" CloseButtonCommand="{Binding CancleButtonCommand}"
PrimaryButtonCommand="{Binding PrimaryButtonCommand}" CloseButtonText="取消"
CloseButtonCommand="{Binding CancleButtonCommand}" DefaultButton="Primary"
Background="#fff" PrimaryButtonCommand="{Binding PrimaryButtonCommand}"
d:DataContext="{d:DesignInstance vmd:VariableDialogViewModel}" PrimaryButtonText="{Binding PrimaryButText}"
mc:Ignorable="d"> mc:Ignorable="d">
<ui:ContentDialog.Resources> <ui:ContentDialog.Resources>
<valueConverts:EnumDescriptionConverter x:Key="EnumDescriptionConverter" /> <valueConverts:EnumDescriptionConverter x:Key="EnumDescriptionConverter" />
<ex:EnumBindingSource x:Key="ProtocolType" EnumType="{x:Type en:ProtocolType}" />
<ex:EnumBindingSource x:Key="SignalType" EnumType="{x:Type enums:SignalType}" />
<ex:EnumBindingSource x:Key="PollLevelType" EnumType="{x:Type enums:PollLevelType}" />
</ui:ContentDialog.Resources> </ui:ContentDialog.Resources>
<Grid > <ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="16">
<Grid.ColumnDefinitions> <!-- 基本信息 -->
<ColumnDefinition Width="*" /> <GroupBox Margin="0,0,0,15" Header="基本信息">
<ColumnDefinition Width="*" /> <Grid Margin="10">
</Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 基本信息 --> <hc:TextBox
<GroupBox Header="基本信息" Grid.Row="0" Grid.Column="0" Margin="0 0 10 10"> Grid.Row="0"
<ikw:SimpleStackPanel Margin="10" Spacing="12"> Grid.Column="0"
<TextBlock Text="变量名称" MinWidth="150"
Style="{StaticResource TextBlockSubTitle}" /> hc:InfoElement.Title="变量名称:"
<TextBox Width="200" Text="{Binding Variable.Name, UpdateSourceTrigger=PropertyChanged}" /> Text="{Binding Variable.Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="变量描述" <hc:TextBox
Style="{StaticResource TextBlockSubTitle}" /> Grid.Row="0"
<TextBox AcceptsReturn="True" Grid.Column="2"
Text="{Binding Variable.Description, UpdateSourceTrigger=PropertyChanged}" /> MinWidth="150"
hc:InfoElement.Title="节点ID:"
Text="{Binding Variable.OpcUaNodeId, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="节点ID" <hc:ComboBox
Style="{StaticResource TextBlockSubTitle}" /> Grid.Row="1"
<TextBox Text="{Binding Variable.OpcUaNodeId, UpdateSourceTrigger=PropertyChanged}" /> Grid.Column="0"
Margin="0,15,0,0"
hc:InfoElement.Title="协议类型:"
ItemsSource="{Binding Source={StaticResource ProtocolType}}"
SelectedItem="{Binding Variable.Protocol, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</hc:ComboBox>
<TextBlock Text="协议类型" <hc:ComboBox
Style="{StaticResource TextBlockSubTitle}" /> Grid.Row="1"
<ComboBox SelectedValue="{Binding Variable.Protocol, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2"
SelectedValuePath="Tag" Margin="0,15,0,0"
ItemsSource="{ex:EnumBindingSource {x:Type en:ProtocolType}}"> hc:InfoElement.Title="信号类型:"
<ComboBox.ItemTemplate> ItemsSource="{Binding Source={StaticResource SignalType}}"
<DataTemplate> SelectedItem="{Binding Variable.SignalType, UpdateSourceTrigger=PropertyChanged}">
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" /> <ComboBox.ItemTemplate>
</DataTemplate> <DataTemplate>
</ComboBox.ItemTemplate> <TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" />
</ComboBox> </DataTemplate>
</ComboBox.ItemTemplate>
</hc:ComboBox>
<TextBlock Text="数据类型" <hc:ComboBox
Style="{StaticResource TextBlockSubTitle}" /> Grid.Row="2"
<TextBox Text="{Binding Variable.CSharpDataType, UpdateSourceTrigger=PropertyChanged}" /> Grid.Column="0"
Margin="0,15,0,0"
hc:InfoElement.Title="轮询级别:"
ItemsSource="{Binding Source={StaticResource PollLevelType}}"
SelectedItem="{Binding Variable.PollLevel, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</hc:ComboBox>
<TextBlock Text="信号类型" <hc:TextBox
Style="{StaticResource TextBlockSubTitle}" /> Grid.Row="2"
<ComboBox SelectedValue="{Binding Variable.SignalType, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2"
SelectedValuePath="Tag" Margin="0,15,0,0"
ItemsSource="{ex:EnumBindingSource {x:Type enums:SignalType}}"> hc:InfoElement.Title="数据类型:"
<ComboBox.ItemTemplate> Text="{Binding Variable.CSharpDataType, UpdateSourceTrigger=PropertyChanged}" />
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="轮询级别" <hc:TextBox
Style="{StaticResource TextBlockSubTitle}" /> Grid.Row="3"
<ComboBox SelectedValue="{Binding Variable.PollLevel, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0"
SelectedValuePath="Tag" Grid.ColumnSpan="3"
ItemsSource="{ex:EnumBindingSource {x:Type enums:PollLevelType}}"> Height="60"
<ComboBox.ItemTemplate> Margin="0,15,0,0"
<DataTemplate> hc:InfoElement.Title="变量描述:"
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" /> Text="{Binding Variable.Description, UpdateSourceTrigger=PropertyChanged}"
</DataTemplate> TextWrapping="Wrap"
</ComboBox.ItemTemplate> VerticalScrollBarVisibility="Auto" />
</ComboBox> </Grid>
</ikw:SimpleStackPanel>
</GroupBox>
<ikw:SimpleStackPanel Grid.Row="0" Grid.Column="1" >
<!-- 保存设置 -->
<GroupBox Header="保存设置" Margin="10 0 0 10">
<ikw:SimpleStackPanel Spacing="12" Margin="10">
<TextBlock Text="保存范围"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Width="200" Text="{Binding Variable.HistoryDeadband, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox Content="是否激活"
FontSize="16"
Margin="0 10 0 0 "
IsChecked="{Binding Variable.IsActive, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox Content="是否保存"
FontSize="16"
Margin="0 10 0 0 "
IsChecked="{Binding Variable.IsHistoryEnabled, UpdateSourceTrigger=PropertyChanged}" />
</ikw:SimpleStackPanel>
</GroupBox> </GroupBox>
<!-- 报警设置 --> <!-- 保存设置 -->
<GroupBox Header="报警设置" Margin="10 15 0 10"> <GroupBox Margin="0,0,0,15" Header="保存设置">
<ikw:SimpleStackPanel Margin="10" Spacing="12"> <Grid Margin="10">
<Grid.ColumnDefinitions>
<TextBlock Text="报警最小值" <ColumnDefinition Width="*" />
Style="{StaticResource TextBlockSubTitle}" /> <ColumnDefinition Width="20" />
<TextBox Text="{Binding Variable.AlarmMinValue, UpdateSourceTrigger=PropertyChanged}" /> <ColumnDefinition Width="*" />
<TextBlock Text="报警最大值" </Grid.ColumnDefinitions>
Style="{StaticResource TextBlockSubTitle}" /> <Grid.RowDefinitions>
<TextBox Text="{Binding Variable.AlarmMaxValue, UpdateSourceTrigger=PropertyChanged}" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<CheckBox Content="是否报警" </Grid.RowDefinitions>
FontSize="16"
Margin="0 5"
IsChecked="{Binding Variable.IsAlarmEnabled, UpdateSourceTrigger=PropertyChanged}" />
</ikw:SimpleStackPanel>
</GroupBox>
</ikw:SimpleStackPanel>
</Grid> <hc:TextBox
Grid.Row="0"
Grid.Column="0"
hc:InfoElement.Title="保存范围:"
Text="{Binding Variable.HistoryDeadband, UpdateSourceTrigger=PropertyChanged}" />
<StackPanel
Grid.Row="0"
Grid.Column="2"
VerticalAlignment="Bottom"
Orientation="Horizontal">
<CheckBox
Margin="0,0,20,0"
Content="是否激活"
IsChecked="{Binding Variable.IsActive, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox Content="是否保存" IsChecked="{Binding Variable.IsHistoryEnabled, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</Grid>
</GroupBox>
<!-- 报警设置 -->
<GroupBox Header="报警设置">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<hc:TextBox
Grid.Row="0"
Grid.Column="0"
hc:InfoElement.Title="报警最小值:"
Text="{Binding Variable.AlarmMinValue, UpdateSourceTrigger=PropertyChanged}" />
<hc:TextBox
Grid.Row="0"
Grid.Column="2"
hc:InfoElement.Title="报警最大值:"
Text="{Binding Variable.AlarmMaxValue, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="3"
Margin="0,15,0,0"
Content="是否报警"
IsChecked="{Binding Variable.IsAlarmEnabled, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</GroupBox>
</StackPanel>
</ScrollViewer>
</ui:ContentDialog> </ui:ContentDialog>

View File

@@ -7,8 +7,8 @@ namespace DMS.WPF.Views.Dialogs;
public partial class VariableDialog public partial class VariableDialog
{ {
private const int ContentAreaMaxWidth = 1000; private const int ContentAreaMaxWidth = 1200;
private const int ContentAreaMaxHeight = 800; private const int ContentAreaMaxHeight = 900;
public VariableDialog() public VariableDialog()
{ {
InitializeComponent(); InitializeComponent();
@@ -17,7 +17,6 @@ public partial class VariableDialog
private void OnOpened(ContentDialog sender, ContentDialogOpenedEventArgs args) private void OnOpened(ContentDialog sender, ContentDialogOpenedEventArgs args)
{ {
//<2F>޸ĶԻ<C4B6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
var backgroundElementBorder = VisualTreeFinder.FindVisualChildByName<Border>(this, "BackgroundElement"); var backgroundElementBorder = VisualTreeFinder.FindVisualChildByName<Border>(this, "BackgroundElement");
backgroundElementBorder.MaxWidth = ContentAreaMaxWidth; backgroundElementBorder.MaxWidth = ContentAreaMaxWidth;
backgroundElementBorder.MaxWidth = ContentAreaMaxHeight; backgroundElementBorder.MaxWidth = ContentAreaMaxHeight;