将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
<UserControl x:Class="XP.Hardware.PLC.Sentry.Views.SignalMonitorView"
|
||||
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
|
||||
xmlns:views="clr-namespace:XP.Hardware.PLC.Sentry.Views"
|
||||
xmlns:converters="clr-namespace:XP.Hardware.PLC.Sentry.Converters"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
|
||||
<UserControl.Resources>
|
||||
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
|
||||
<converters:NullOrEmptyToVisibilityConverter x:Key="NullToCollapsedConverter"/>
|
||||
|
||||
<!-- 读取错误时的前景色样式 | Foreground style for read errors -->
|
||||
<Style x:Key="ReadErrorCellStyle" TargetType="telerik:GridViewCell">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding HasReadError}" Value="True">
|
||||
<Setter Property="Foreground" Value="#FFD32F2F"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!-- === 写入控件模板 | Write control templates === -->
|
||||
|
||||
<!-- bool 类型:ToggleButton | Bool type: ToggleButton -->
|
||||
<DataTemplate x:Key="BoolWriteTemplate">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<ToggleButton IsChecked="{Binding WriteValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
Content="{Binding WriteValue, TargetNullValue=False}"
|
||||
MinWidth="60" Padding="6,2"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
<TextBlock Text="{Binding ValidationError}"
|
||||
Foreground="#FFD32F2F" FontSize="10"
|
||||
Visibility="{Binding ValidationError, Converter={StaticResource NullToCollapsedConverter}}"
|
||||
TextWrapping="Wrap" Margin="0,2,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!-- 整数类型:RadNumericUpDown(整数模式)| Integer type: RadNumericUpDown (integer mode) -->
|
||||
<DataTemplate x:Key="IntegerWriteTemplate">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<telerik:RadNumericUpDown Value="{Binding WriteValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
telerik:StyleManager.Theme="Crystal"
|
||||
NumberDecimalDigits="0"
|
||||
IsInteger="True"
|
||||
MinWidth="80"
|
||||
HorizontalAlignment="Stretch"
|
||||
UpdateValueEvent="PropertyChanged"/>
|
||||
<TextBlock Text="{Binding ValidationError}"
|
||||
Foreground="#FFD32F2F" FontSize="10"
|
||||
Visibility="{Binding ValidationError, Converter={StaticResource NullToCollapsedConverter}}"
|
||||
TextWrapping="Wrap" Margin="0,2,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!-- 浮点类型:RadNumericUpDown(浮点模式)| Float type: RadNumericUpDown (float mode) -->
|
||||
<DataTemplate x:Key="FloatWriteTemplate">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<telerik:RadNumericUpDown Value="{Binding WriteValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
telerik:StyleManager.Theme="Crystal"
|
||||
NumberDecimalDigits="4"
|
||||
IsInteger="False"
|
||||
MinWidth="80"
|
||||
HorizontalAlignment="Stretch"
|
||||
UpdateValueEvent="PropertyChanged"/>
|
||||
<TextBlock Text="{Binding ValidationError}"
|
||||
Foreground="#FFD32F2F" FontSize="10"
|
||||
Visibility="{Binding ValidationError, Converter={StaticResource NullToCollapsedConverter}}"
|
||||
TextWrapping="Wrap" Margin="0,2,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!-- 字符串类型:TextBox | String type: TextBox -->
|
||||
<DataTemplate x:Key="StringWriteTemplate">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBox Text="{Binding WriteValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
MinWidth="80"
|
||||
HorizontalAlignment="Stretch"
|
||||
Padding="2"/>
|
||||
<TextBlock Text="{Binding ValidationError}"
|
||||
Foreground="#FFD32F2F" FontSize="10"
|
||||
Visibility="{Binding ValidationError, Converter={StaticResource NullToCollapsedConverter}}"
|
||||
TextWrapping="Wrap" Margin="0,2,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!-- 写入值模板选择器 | Write value template selector -->
|
||||
<views:WriteValueTemplateSelector x:Key="WriteValueTemplateSelector"
|
||||
BoolTemplate="{StaticResource BoolWriteTemplate}"
|
||||
IntegerTemplate="{StaticResource IntegerWriteTemplate}"
|
||||
FloatTemplate="{StaticResource FloatWriteTemplate}"
|
||||
StringTemplate="{StaticResource StringWriteTemplate}"/>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid>
|
||||
<!-- 无数据时的占位提示 | Placeholder when no data -->
|
||||
<TextBlock Text="请加载信号定义文件 | Please load signal definition file"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
Foreground="#FF999999" FontSize="14"
|
||||
Visibility="{Binding HasNoGroups, Converter={StaticResource BoolToVis}}"/>
|
||||
|
||||
<!-- 信号分组标签页 | Signal group tabs -->
|
||||
<telerik:RadTabControl ItemsSource="{Binding SignalGroups}"
|
||||
telerik:StyleManager.Theme="Crystal"
|
||||
DisplayMemberPath="TabHeader"
|
||||
OverflowMode="Scroll"
|
||||
TabStripPlacement="Top">
|
||||
<telerik:RadTabControl.ContentTemplate>
|
||||
<DataTemplate>
|
||||
<!-- 每个 Tab 页内的信号表格 | Signal grid within each tab -->
|
||||
<telerik:RadGridView ItemsSource="{Binding Signals}"
|
||||
telerik:StyleManager.Theme="Crystal"
|
||||
AutoGenerateColumns="False"
|
||||
IsReadOnly="False"
|
||||
RowIndicatorVisibility="Collapsed"
|
||||
ShowGroupPanel="False"
|
||||
CanUserFreezeColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
CanUserResizeColumns="True"
|
||||
ColumnWidth="*"
|
||||
SelectionMode="Single"
|
||||
IsFilteringAllowed="False"
|
||||
ShowColumnSortIndexes="False">
|
||||
<telerik:RadGridView.Columns>
|
||||
<!-- 名称列 | Name column -->
|
||||
<telerik:GridViewDataColumn Header="名称 | Name"
|
||||
DataMemberBinding="{Binding Name}"
|
||||
IsReadOnly="True"
|
||||
Width="200"/>
|
||||
|
||||
<!-- 类型列 | Type column -->
|
||||
<telerik:GridViewDataColumn Header="类型 | Type"
|
||||
DataMemberBinding="{Binding Type}"
|
||||
IsReadOnly="True"
|
||||
Width="80"/>
|
||||
|
||||
<!-- 地址列 | Address column -->
|
||||
<telerik:GridViewDataColumn Header="地址 | Address"
|
||||
DataMemberBinding="{Binding AddressDisplay}"
|
||||
IsReadOnly="True"
|
||||
Width="120"/>
|
||||
|
||||
<!-- 当前值列 | Current value column -->
|
||||
<telerik:GridViewDataColumn Header="当前值 | Value"
|
||||
DataMemberBinding="{Binding CurrentValue}"
|
||||
IsReadOnly="True"
|
||||
Width="120"
|
||||
CellStyle="{StaticResource ReadErrorCellStyle}"/>
|
||||
|
||||
<!-- 写入值列(根据类型动态选择控件)| Write value column (dynamic control by type) -->
|
||||
<telerik:GridViewColumn Header="写入值 | Write" Width="140">
|
||||
<telerik:GridViewColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<ContentControl Content="{Binding}"
|
||||
ContentTemplateSelector="{StaticResource WriteValueTemplateSelector}"/>
|
||||
</DataTemplate>
|
||||
</telerik:GridViewColumn.CellTemplate>
|
||||
</telerik:GridViewColumn>
|
||||
|
||||
<!-- 操作按钮列 | Action button column -->
|
||||
<telerik:GridViewColumn Header="操作 | Action" Width="140">
|
||||
<telerik:GridViewColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||
<telerik:RadButton Content="应用" Command="{Binding ApplyCommand}"
|
||||
telerik:StyleManager.Theme="Crystal"
|
||||
Width="50" Margin="0,0,4,0" Padding="4,2"
|
||||
ToolTip="队列写入 | Queue Write"/>
|
||||
<telerik:RadButton Content="直写" Command="{Binding DirectWriteCommand}"
|
||||
telerik:StyleManager.Theme="Crystal"
|
||||
Width="50" Padding="4,2"
|
||||
ToolTip="直接写入+回读校验 | Direct Write with Verify"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</telerik:GridViewColumn.CellTemplate>
|
||||
</telerik:GridViewColumn>
|
||||
|
||||
<!-- 备注列 | Remark column -->
|
||||
<telerik:GridViewDataColumn Header="备注 | Remark"
|
||||
DataMemberBinding="{Binding Remark}"
|
||||
IsReadOnly="True"
|
||||
Width="*"/>
|
||||
</telerik:RadGridView.Columns>
|
||||
</telerik:RadGridView>
|
||||
</DataTemplate>
|
||||
</telerik:RadTabControl.ContentTemplate>
|
||||
</telerik:RadTabControl>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user