Commit 2b34d5ba by liulongfei

編輯

parent 8aa14ee6
...@@ -50,6 +50,10 @@ ...@@ -50,6 +50,10 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="DevExpress.Data.Desktop.v22.1, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v22.1, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v22.1.Core, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Xpf.Core.v22.1, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
...@@ -90,6 +94,7 @@ ...@@ -90,6 +94,7 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<Compile Include="Widgets\LeftRightTextEdit\LeftRightTextEdit.cs" />
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
...@@ -100,5 +105,6 @@ ...@@ -100,5 +105,6 @@
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>
\ No newline at end of file
using DevExpress.Xpf.Editors;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows;
namespace VIZ.Package.Common
{
/// <summary>
/// 左右拖拽改变值文本编辑器
/// </summary>
public class LeftRightTextEdit : TextEdit
{
#region MouseMinMove -- 鼠标最小移动值
/// <summary>
/// 鼠标最小移动值
/// </summary>
public double MouseMinMove
{
get { return (double)GetValue(MouseMinMoveProperty); }
set { SetValue(MouseMinMoveProperty, value); }
}
/// <summary>
/// Using a DependencyProperty as the backing store for MouseMinMove. This enables animation, styling, binding, etc...
/// </summary>
public static readonly DependencyProperty MouseMinMoveProperty =
DependencyProperty.Register("MouseMinMove", typeof(double), typeof(LeftRightTextEdit), new PropertyMetadata(5d));
#endregion
#region ValueChangeStep -- 值改变步长
/// <summary>
/// 值改变步长
/// </summary>
public double ValueChangeStep
{
get { return (double)GetValue(ValueChangeStepProperty); }
set { SetValue(ValueChangeStepProperty, value); }
}
/// <summary>
/// Using a DependencyProperty as the backing store for ValueChangeStep. This enables animation, styling, binding, etc...
/// </summary>
public static readonly DependencyProperty ValueChangeStepProperty =
DependencyProperty.Register("ValueChangeStep", typeof(double), typeof(LeftRightTextEdit), new PropertyMetadata(0.1d));
#endregion
/// <summary>
/// 鼠标是否按下
/// </summary>
private bool isMouseDown;
/// <summary>
/// 鼠标最后的值
/// </summary>
private double mouseLastPositionX;
/// <summary>
/// 之前的鼠标形状
/// </summary>
private Cursor beforeCursor;
/// <summary>
/// 鼠标按下
/// </summary>
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnPreviewMouseLeftButtonDown(e);
this.mouseLastPositionX = e.GetPosition(this).X;
this.beforeCursor = this.Cursor;
this.Cursor = Cursors.ScrollWE;
this.isMouseDown = true;
}
/// <summary>
/// 鼠标弹起
/// </summary>
protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnPreviewMouseLeftButtonUp(e);
this.Cursor = this.beforeCursor;
this.beforeCursor = null;
this.isMouseDown = false;
}
/// <summary>
/// 鼠标移动
/// </summary>
protected override void OnPreviewMouseMove(MouseEventArgs e)
{
base.OnPreviewMouseMove(e);
if (!this.isMouseDown || e.LeftButton != MouseButtonState.Pressed)
return;
Point position = e.GetPosition(this);
double move = position.X - this.mouseLastPositionX;
if (Math.Abs(move) < this.MouseMinMove)
return;
double.TryParse(this.EditValue?.ToString(), out double current);
this.EditValue = current + (int)(move / this.MouseMinMove) * this.ValueChangeStep;
this.mouseLastPositionX = position.X;
}
}
}
\ No newline at end of file
...@@ -48,6 +48,9 @@ namespace VIZ.Package.Module ...@@ -48,6 +48,9 @@ namespace VIZ.Package.Module
GridCellData data = (GridCellData)item; GridCellData data = (GridCellData)item;
GridColumnDefinition definition = data.Column.DataContext as GridColumnDefinition; GridColumnDefinition definition = data.Column.DataContext as GridColumnDefinition;
if (definition == null)
return null;
switch (definition.Type) switch (definition.Type)
{ {
case VizControlFieldType.none: return null; case VizControlFieldType.none: return null;
......
<UserControl x:Class="VIZ.Package.Module.TripletEditPanel"
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:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:fcore="clr-namespace:VIZ.Framework.Core;assembly=VIZ.Framework.Core"
xmlns:storage="clr-namespace:VIZ.Package.Storage;assembly=VIZ.Package.Storage"
xmlns:resource="clr-namespace:VIZ.Package.Module.Resource;assembly=VIZ.Package.Module.Resource"
xmlns:local="clr-namespace:VIZ.Package.Module"
d:DataContext="{d:DesignInstance Type=local:TripletEditPanelModel}"
d:Background="White"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!-- 值编辑 -->
<TextBlock Text="X:" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,10,0" Grid.Row="0"></TextBlock>
<dxe:TextEdit Grid.Row="0" Grid.Column="1" Height="30" MaskType="Numeric"
EditValue="{Binding Path=X,Mode=TwoWay}"></dxe:TextEdit>
<TextBlock Text="Y:" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,10,0" Grid.Row="1"></TextBlock>
<dxe:TextEdit Grid.Row="1" Grid.Column="1" Height="30" MaskType="Numeric"
EditValue="{Binding Path=Y,Mode=TwoWay}"></dxe:TextEdit>
<TextBlock Text="Z:" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,10,0" Grid.Row="2"></TextBlock>
<dxe:TextEdit Grid.Row="2" Grid.Column="1" Height="30" MaskType="Numeric"
EditValue="{Binding Path=Z,Mode=TwoWay}"></dxe:TextEdit>
<!-- 编辑模式 -->
<RadioButton Grid.Row="0" Grid.Column="2" Content="Single" Margin="10,0,0,0"
IsChecked="True">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="Checked" Command="{Binding Path=EditModeChangedCommand}"
CommandParameter="{x:Static local:TripletEditPanelMode.Single}"></dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</RadioButton>
<RadioButton Grid.Row="1" Grid.Column="2" Content="Locked" Margin="10,0,0,0">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="Checked" Command="{Binding Path=EditModeChangedCommand}"
CommandParameter="{x:Static local:TripletEditPanelMode.Locked}"></dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</RadioButton>
<RadioButton Grid.Row="2" Grid.Column="2" Content="Propotional" Margin="10,0,0,0">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="Checked" Command="{Binding Path=EditModeChangedCommand}"
CommandParameter="{x:Static local:TripletEditPanelMode.Propotional}"></dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</RadioButton>
</Grid>
</UserControl>
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;
using VIZ.Framework.Core;
namespace VIZ.Package.Module
{
/// <summary>
/// TripletEditPanel.xaml 的交互逻辑
/// </summary>
public partial class TripletEditPanel : UserControl
{
public TripletEditPanel()
{
InitializeComponent();
WPFHelper.BindingViewModel(this, new TextEditPanelModel());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.Package.Module
{
/// <summary>
/// 三元编辑模式
/// </summary>
public enum TripletEditPanelMode
{
/// <summary>
/// 单独改变值
/// </summary>
Single,
/// <summary>
/// 锁定值
/// </summary>
Locked,
/// <summary>
/// 按照百分比改变值
/// </summary>
Propotional
}
}
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VIZ.Framework.Core;
using VIZ.Package.Domain;
using VIZ.Package.Service;
namespace VIZ.Package.Module
{
/// <summary>
/// 三元编辑面板模型
/// </summary>
public class TripletEditPanelModel : EditPanelModelBase
{
public TripletEditPanelModel()
{
// 初始化命令
this.InitCommand();
}
/// <summary>
/// 初始化命令
/// </summary>
private void InitCommand()
{
this.EditModeChangedCommand = new VCommand<TripletEditPanelMode>(this.EditModeChanged);
}
// ============================================================
// Property
// ============================================================
#region Text -- 文本
private string text;
/// <summary>
/// 文本
/// </summary>
public string Text
{
get { return text; }
set
{
text = value;
this.RaisePropertyChanged(nameof(Text));
this.OnTextChanged();
}
}
#endregion
#region EditMode -- 编辑模式
private TripletEditPanelMode editMode;
/// <summary>
/// 编辑模式
/// </summary>
public TripletEditPanelMode EditMode
{
get { return editMode; }
set { editMode = value; this.RaisePropertyChanged(nameof(EditMode)); }
}
#endregion
#region X -- X
private double x;
/// <summary>
/// X值
/// </summary>
public double X
{
get { return x; }
set
{
x = value;
this.RaisePropertyChanged(nameof(X));
this.OnTextChanged();
}
}
#endregion
#region Y -- Y
private double y;
/// <summary>
/// Y值
/// </summary>
public double Y
{
get { return y; }
set
{
y = value;
this.RaisePropertyChanged(nameof(Y));
this.OnTextChanged();
}
}
#endregion
#region Z -- Z
private double z;
/// <summary>
/// Z值
/// </summary>
public double Z
{
get { return z; }
set
{
z = value;
this.RaisePropertyChanged(nameof(Z));
this.OnTextChanged();
}
}
#endregion
// ============================================================
// Command
// ============================================================
#region EditModeChangedCommand -- 编辑模式改变命令
/// <summary>
/// 编辑模式改变命令
/// </summary>
public VCommand<TripletEditPanelMode> EditModeChangedCommand { get; set; }
/// <summary>
/// 编辑模式改变
/// </summary>
/// <param name="editMode">编辑模式</param>
private void EditModeChanged(TripletEditPanelMode editMode)
{
this.EditMode = editMode;
}
#endregion
// ============================================================
// Public Function
// ============================================================
/// <summary>
/// 更新
/// </summary>
/// <param name="controlObject">控制对象</param>
/// <param name="controlField">控制字段</param>
public override void Update(ControlObjectModel controlObject, ControlFieldNodeModel controlField)
{
base.Update(controlObject, controlField);
this.IsSendToPreview = false;
this.Text = controlField?.Value;
this.IsSendToPreview = true;
}
/// <summary>
/// 更新动态数据
/// </summary>
/// <param name="listCellEdit">列单元格编辑器</param>
/// <param name="columnDefinition">列定义</param>
/// <param name="rowHandle">行号</param>
/// <param name="row">行数据</param>
public override void UpdateDynamic(ListCellEditBase listCellEdit, GridColumnDefinition columnDefinition, int rowHandle, ExpandoObject row)
{
base.UpdateDynamic(listCellEdit, columnDefinition, rowHandle, row);
IDictionary<string, object> dic = row as IDictionary<string, object>;
this.IsSendToPreview = false;
this.Text = dic?[columnDefinition.FieldName]?.ToString();
this.IsSendToPreview = true;
}
// ============================================================
// Private Function
// ============================================================
/// <summary>
/// 文本值改变时触发
/// </summary>
private void OnTextChanged()
{
// 不需要向预览发送值
if (!this.IsSendToPreview)
return;
// 没有预览连接
if (ApplicationDomainEx.PreviewConn == null)
return;
// 没有控制对象或控制字段
if (this.ControlObject == null || this.ControlField == null)
return;
// 正常模式编辑
if (this.FieldEditMode == FieldEditMode.Normal)
{
this.ControlField.Value = this.Text;
this.VizCommandControlObjectService.SetControlObjectValue(
ApplicationDomainEx.PreviewConn,
this.ControlObject.TreeNodePath,
this.ControlField.FieldIdentifier,
this.ControlField.Value);
return;
}
// 没有列信息或行数据
if (this.ColumnDefinition == null || this.Row == null)
return;
// 动态模式编辑
if (this.FieldEditMode == FieldEditMode.Dynamic)
{
IDictionary<string, object> dic = this.Row as IDictionary<string, object>;
dic[this.ColumnDefinition.FieldName] = this.Text;
this.ListCellEdit.UpdateEditValue(this.ColumnDefinition, this.RowHandle, this.Row);
return;
}
}
}
}
...@@ -107,6 +107,11 @@ ...@@ -107,6 +107,11 @@
<Compile Include="ControlObject\FieldEdit\Edit\ResourceEdit\GHResourceEditPartModel.cs" /> <Compile Include="ControlObject\FieldEdit\Edit\ResourceEdit\GHResourceEditPartModel.cs" />
<Compile Include="ControlObject\FieldEdit\Edit\ResourceEdit\ResourceEditPanelModelBase.cs" /> <Compile Include="ControlObject\FieldEdit\Edit\ResourceEdit\ResourceEditPanelModelBase.cs" />
<Compile Include="ControlObject\FieldEdit\Edit\TextEdit\TextEditPanelModel.cs" /> <Compile Include="ControlObject\FieldEdit\Edit\TextEdit\TextEditPanelModel.cs" />
<Compile Include="ControlObject\FieldEdit\Edit\TripletEdit\TripletEditPanelMode.cs" />
<Compile Include="ControlObject\FieldEdit\Edit\TripletEdit\TripletEditPanelModel.cs" />
<Compile Include="ControlObject\FieldEdit\Edit\TripletEdit\TripletEditPanel.xaml.cs">
<DependentUpon>TripletEditPanel.xaml</DependentUpon>
</Compile>
<Compile Include="ControlObject\FieldEdit\FieldEditPluginLifeCycle.cs" /> <Compile Include="ControlObject\FieldEdit\FieldEditPluginLifeCycle.cs" />
<Compile Include="ControlObject\FieldEdit\ViewModel\FieldEditViewModel.cs" /> <Compile Include="ControlObject\FieldEdit\ViewModel\FieldEditViewModel.cs" />
<Compile Include="ControlObject\FieldEdit\ViewModel\FieldEditWindowModel.cs" /> <Compile Include="ControlObject\FieldEdit\ViewModel\FieldEditWindowModel.cs" />
...@@ -251,6 +256,10 @@ ...@@ -251,6 +256,10 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="ControlObject\FieldEdit\Edit\TripletEdit\TripletEditPanel.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Control\View\ControlView.xaml"> <Page Include="Control\View\ControlView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment