Sic.Framework-Nanjing-Baishi/MECF.Framework.UI.Client/RecipeEditorLib/DGExtension/DataGridRecipe.xaml

618 lines
30 KiB
Plaintext
Raw Normal View History

<UserControl x:Class="MECF.Framework.UI.Client.RecipeEditorLib.DGExtension.DataGridRecipe"
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:MECF.Framework.UI.Client.RecipeEditorLib.DGExtension"
xmlns:controls="clr-namespace:ExtendedGrid.Microsoft.Windows.Controls"
xmlns:cv="clr-namespace:MECF.Framework.UI.Client.RecipeEditorLib.Converters"
xmlns:controls1="clr-namespace:OpenSEMI.Ctrlib.Controls"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:micro="clr-namespace:Caliburn.Micro"
xmlns:converters="clr-namespace:MECF.Framework.UI.Core.Converters;assembly=MECF.Framework.UI.Core"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<!-- #region Converters -->
<converters:BoolCollapsedConverter x:Key="BoolCollapsedConverter"/>
<cv:ParamToCellTooltipConverter x:Key="CellTooltipConverter"/>
<cv:IsHighlightedToBorderThickness x:Key="IsHighlightedToBorderThickness"/>
<cv:IsHighlightedToBorderBrush x:Key="IsHighlightedToBorderBrush"/>
<cv:ParamValueDisplayConverter x:Key="ParamValueDisplayConverter"/>
<cv:PermissionToIsEnabledConverter x:Key="PermissionToIsEnabledConverter"/>
<!-- #endregion -->
<!-- #region Column Header Template -->
<DataTemplate x:Key="ColumnHeaderTemplateCommon">
<Grid Width="320" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="280" />
<ColumnDefinition Width="40" />
</Grid.ColumnDefinitions>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<TextBlock
Grid.Column="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="16"
Text="{Binding DisplayName}" />
<TextBlock
Grid.Column="1"
Margin="0,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="16"
Text="{Binding UnitName}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="ColumnHeaderTemplateStepNo">
<Grid Width="320" Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="280" />
<ColumnDefinition Width="40" />
</Grid.ColumnDefinitions>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<TextBlock
Grid.Column="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="16"
Text="{Binding DisplayName}" />
<CheckBox
Grid.Column="1"
Margin="0,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
IsChecked="{Binding DataContext.CurrentRecipe.Steps.IsAllStepsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="ColumnHeaderTemplateExpander">
<Border
Width="340"
Margin="-5,-8,-6,-8"
Background="LightGray">
<Expander
Margin="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Stretch"
FontSize="14"
Header="{Binding DisplayName}"
IsExpanded="{Binding IsExpanded}"
Expanded="Expander_OnExpanded"
Collapsed="Expander_OnCollapsed">
</Expander>
<Border.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Border.LayoutTransform>
</Border>
</DataTemplate>
<!-- #endregion -->
<Style x:Key="DoubleUpDownStyle1" TargetType="{x:Type xctk:DoubleUpDown}">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type xctk:DoubleUpDown}">
<xctk:WatermarkTextBox
x:Name="PART_TextBox"
Style="{StaticResource GenericTextBoxStyle}"
AcceptsReturn="false"
Background="{TemplateBinding Background}"
BorderThickness="0"
ContextMenu="{TemplateBinding ContextMenu}"
FontStretch="{TemplateBinding FontStretch}"
Foreground="{TemplateBinding Foreground}"
FontStyle="{TemplateBinding FontStyle}"
FontFamily="{TemplateBinding FontFamily}"
FontWeight="{TemplateBinding FontWeight}"
FontSize="{TemplateBinding FontSize}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}"
MinWidth="20"
Padding="{TemplateBinding Padding}"
SelectAllOnGotFocus="{Binding SelectAllOnGotFocus, RelativeSource={RelativeSource TemplatedParent}}"
TextAlignment="{Binding TextAlignment, RelativeSource={RelativeSource TemplatedParent}}"
TabIndex="{TemplateBinding TabIndex}"
TextWrapping="NoWrap"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Watermark="{Binding Watermark, RelativeSource={RelativeSource TemplatedParent}}"
WatermarkTemplate="{Binding WatermarkTemplate, RelativeSource={RelativeSource TemplatedParent}}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--#region Cell Templates -->
<DataTemplate x:Key="CellTemplateDisplay">
<Border
BorderThickness="{Binding IsHighlighted, Mode=OneWay, Converter={StaticResource IsHighlightedToBorderThickness}}"
BorderBrush="{Binding IsHighlighted, Mode=OneWay, Converter={StaticResource IsHighlightedToBorderBrush}}"
ToolTip="{Binding Converter={StaticResource CellTooltipConverter}}"
PreviewMouseDown="DataGridCell_OnPreviewMouseDown">
<Border.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Border.LayoutTransform>
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="#00FFFFFF"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSaved}" Value="False">
<Setter Property="Background" Value="{StaticResource DataGrid_BG_CellValueChangedWithoutSave}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock
Padding="5,3"
HorizontalAlignment="Center"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis">
<TextBlock.Text>
<!-- 是否隐藏单元格内容 -->
<MultiBinding Converter="{StaticResource ParamValueDisplayConverter}">
<Binding Path="Value"/>
<Binding Path="Permission"/>
</MultiBinding>
</TextBlock.Text>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<MultiDataTrigger >
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEqualsToPrevious}" Value="False"/>
<Condition Binding="{Binding IsValid}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="{StaticResource DataGrid_FG_CellValueNotValid}" />
</MultiDataTrigger>
<MultiDataTrigger >
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEqualsToPrevious}" Value="True"/>
<Condition Binding="{Binding IsValid}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="{StaticResource DataGrid_FG_CellValueNotValid}" />
</MultiDataTrigger>
<MultiDataTrigger >
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEqualsToPrevious}" Value="False"/>
<Condition Binding="{Binding IsValid}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="{StaticResource DataGrid_FG_CellValueNotEquFront}" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
</DataTemplate>
<DataTemplate x:Key="CellTemplateStepNo">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<Border
Padding="5,1"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0">
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal">
<CheckBox
Margin="4"
IsHitTestVisible="True"
IsChecked="{Binding IsChecked}"
Visibility="{Binding StepCheckVisibility}" />
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="14"
Foreground="Black"
Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding Visible}" />
</StackPanel>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding Visible}" Value="false">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding IsSaved}" Value="False">
<Setter Property="Background" Value="{StaticResource DataGrid_BG_CellValueChangedWithoutSave}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CellTemplateReadOnly">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<Border
Padding="1,1"
Background="{DynamicResource Table_BG_Content}"
BorderThickness="0,0,1,1">
<TextBlock
Padding="5,3"
IsEnabled="{Binding IsEnabled}"
Text="{Binding Value}" />
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CellTemplateText">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<Border
Padding="1,1"
Background="{DynamicResource Table_BG_Content}"
BorderThickness="0,0,1,1">
<controls1:TextBoxEx
Padding="5,3"
AllowBackgroundChange="True"
IsEnabled="{Binding IsEnabled}"
Text="{Binding Value, Mode=TwoWay}"
TextSaved="{Binding IsSaved, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="True">
<Setter Property="BorderBrush" Value="DarkBlue" />
</DataTrigger>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
<DataTrigger Binding="{Binding Visible}" Value="false">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CellTemplateSets3Ratio">
<Border>
<Border.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Border.LayoutTransform>
<TextBox
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
IsEnabled="{Binding IsEnabled}"
Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Style>
<Style TargetType="TextBox" BasedOn="{StaticResource GenericTextBoxStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter Property="Foreground" Value="#9c0006"/>
<Setter Property="Background" Value="#ffc7ce"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Border>
</DataTemplate>
<DataTemplate x:Key="CellTemplateNumber">
<Border>
<Border.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Border.LayoutTransform>
<xctk:DoubleUpDown
Value="{Binding Value,
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}"
SelectAllOnGotFocus="True"
ShowButtonSpinner="False">
<xctk:DoubleUpDown.Style>
<Style TargetType="xctk:DoubleUpDown" BasedOn="{StaticResource DoubleUpDownStyle1}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter Property="Foreground" Value="#9c0006"/>
<Setter Property="Background" Value="#ffc7ce"/>
</DataTrigger>
</Style.Triggers>
</Style>
</xctk:DoubleUpDown.Style>
</xctk:DoubleUpDown>
</Border>
</DataTemplate>
<DataTemplate x:Key="CellTemplateNumberText">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<Border
Padding="1,1"
Background="{DynamicResource Table_BG_Content}"
BorderThickness="0,0,1,1">
<controls1:TextBoxEx
Padding="5,3"
AllowBackgroundChange="True"
IsEnabled="{Binding IsEnabled}"
MaxValue="{Binding Maximun}"
MinValue="{Binding Minimun}"
Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="True">
<Setter Property="BorderBrush" Value="DarkBlue" />
</DataTrigger>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CellTemplateComboBox">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<Border
Padding="1,1"
Background="{DynamicResource Table_BG_Content}"
BorderThickness="0,0,1,1">
<controls1:ComboTextBlock
Padding="5,3"
AllowBackgroundChange="True"
IsEditable="{Binding IsEditable}"
IsEnabled="{Binding IsEnabled}"
IsLoopItem="{Binding IsLoopItem}"
ItemsSource="{Binding Options}"
Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="True">
<Setter Property="BorderBrush" Value="DarkBlue" />
</DataTrigger>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
<DataTrigger Binding="{Binding Visible}" Value="false">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CellTemplateComboBoxEx">
<Border>
<Border.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Border.LayoutTransform>
<ComboBox
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
DisplayMemberPath="DisplayName"
IsEditable="{Binding IsEditable}"
ItemsSource="{Binding Options}"
Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Delay=10}"/>
</Border>
</DataTemplate>
<DataTemplate x:Key="CellTemplatePopSetting">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Grid.LayoutTransform>
<Border
Padding="15,1"
Background="{DynamicResource Table_BG_Content}"
BorderThickness="0,0,1,1">
<Button
Content="{Binding DisplayName}"
Foreground="Black"
IsEnabled="{Binding IsEnabled}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<micro:ActionMessage MethodName="PopSetting">
<micro:Parameter Value="{Binding Name}" />
<micro:Parameter Value="{Binding}" />
</micro:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="True">
<Setter Property="BorderBrush" Value="DarkBlue" />
</DataTrigger>
<DataTrigger Binding="{Binding IsColumnSelected}" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CellTemplateExpander">
<Border
Width="Auto"
MinWidth="90"
Margin="0,-5"
Background="LightGray">
<Border.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Border.LayoutTransform>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" />
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding Visible}" Value="false">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</DataTemplate>
<!--#endregion -->
<!--<Style TargetType="controls:DataGridCell" BasedOn="{x:Null}">
<Setter
Property="IsEnabled"
Value="{Binding Permission,
Converter={StaticResource PermissionToIsEnabledConverter}}"/>
</Style>-->
<Style x:Key="RecipeEditorDataGrid" TargetType="local:XDataGrid" BasedOn="{x:Null}">
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="CanUserAddRows" Value="False"/>
<Setter Property="CanUserDeleteRows" Value="False"/>
<Setter Property="CanUserReorderColumns" Value="False"/>
<Setter Property="CanUserResizeColumns" Value="False"/>
<Setter Property="CanUserResizeRows" Value="False"/>
<Setter Property="FrozenColumnCount" Value="4"/>
<Setter Property="GridLinesVisibility" Value="None"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="SelectionUnit" Value="Cell"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="UseHorizontalScrolling" Value="True"/>
<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="CellStyle" Value="{x:Null}"/>
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="RowStyle">
<Setter.Value>
<Style TargetType="controls:DataGridRow">
<Setter
Property="Visibility"
Value="{Binding IsVisible,
Converter={StaticResource BoolCollapsedConverter}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" Value="{StaticResource DataGrid_BG_Selected}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
</Style>
<!-- #region Drag-to-Fill Style-->
<SolidColorBrush x:Key="DragToFillFrameColor" Color="ForestGreen"/>
<Style x:Key="DragToFillThumbStyle" TargetType="Thumb" BasedOn="{x:Null}">
<Setter Property="Height" Value="10"/>
<Setter Property="Width" Value="10"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Rectangle
StrokeThickness="0"
Fill="{StaticResource DragToFillFrameColor}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- #endregion -->
</UserControl.Resources>
<local:XDataGrid
x:Name="dgCustom"
DragToFillAdornerColorBrush="{StaticResource DragToFillFrameColor}"
DragToFillAdornerThumbStyle="{StaticResource DragToFillThumbStyle}"
Style="{StaticResource RecipeEditorDataGrid}"
Width="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
Height="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
LoadingRow="DgCustom_OnLoadingRow"
UnloadingRow="DgCustom_OnUnloadingRow"
BeginningEdit="DgCustom_OnBeginningEdit"
CellEditEnding="DgCustom_OnCellEditEnding">
</local:XDataGrid>
</UserControl>