ReDo Undo Item ItemWidth 和 Angle 等工具栏设置完成

This commit is contained in:
艾竹
2023-04-09 12:38:57 +08:00
parent 2ef5b7a1ed
commit fae7826577
16 changed files with 487 additions and 464 deletions

View File

@@ -37,7 +37,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
public MainWindowViewModel()
{
ToolBoxViewModel = new ToolBoxViewModel();
ToolBoxViewModel = new ToolBoxViewModel(this);
DiagramsViewModels = new ObservableCollection<PageViewModel>();
DiagramsViewModels.Add(new PageViewModel("新建-1", "*", DiagramType.Normal));
@@ -178,11 +178,11 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
}
}
public SelectableDesignerItemViewModelBase SelectedItem
public SelectableDesignerItemViewModelBase SelectedItemViewModel
{
get
{
return _service.SelectedItem;
return _service.SelectedItemViewModel;
}
}
@@ -367,118 +367,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
{
return this._selectedColorCommand ?? (this._selectedColorCommand = new DelegateCommand<object>(para => this.SelectedColorExecuted(para)));
}
}
private ICommand _addPageCommand;
public ICommand AddPageCommand
{
get
{
return this._addPageCommand ?? (this._addPageCommand = new DelegateCommand<object>(para => this.AddPageExecuted(para)));
}
}
private ICommand _addCopyPageCommand;
public ICommand AddCopyPageCommand
{
get
{
return this._addCopyPageCommand ?? (this._addCopyPageCommand = new DelegateCommand<object>(para => this.AddCopyPageExecuted(para)));
}
}
private ICommand _renamePageCommand;
public ICommand RenamePageCommand
{
get
{
return this._renamePageCommand ?? (this._renamePageCommand = new DelegateCommand<object>(para => this.RenamePageExecuted(para)));
}
}
private ICommand _endRenamePageCommand;
public ICommand EndRenamePageCommand
{
get
{
return this._endRenamePageCommand ?? (this._endRenamePageCommand = new DelegateCommand<object>(para => this.EndRenamePageExecuted(para)));
}
}
private ICommand _deletePageCommand;
public ICommand DeletePageCommand
{
get
{
return this._deletePageCommand ?? (this._deletePageCommand = new DelegateCommand<object>(para => this.DeletePageExecuted(para)));
}
}
private ICommand _addImageCommand;
public ICommand AddImageCommand
{
get
{
return this._addImageCommand ?? (this._addImageCommand = new DelegateCommand<object>(para => this.AddImageExecuted(para)));
}
}
private ICommand _editImageCommand;
public ICommand EditImageCommand
{
get
{
return this._editImageCommand ?? (this._editImageCommand = new DelegateCommand<object>(para => this.EditImageExecuted(para)));
}
}
private ICommand _resizeImageCommand;
public ICommand ResizeImageCommand
{
get
{
return this._resizeImageCommand ?? (this._resizeImageCommand = new DelegateCommand<object>(para => this.ResizeImageExecuted(para)));
}
}
private ICommand _resetImageCommand;
public ICommand ResetImageCommand
{
get
{
return this._resetImageCommand ?? (this._resetImageCommand = new DelegateCommand<object>(para => this.ResetImageExecuted(para)));
}
}
private ICommand _addVideoCommand;
public ICommand AddVideoCommand
{
get
{
return this._addVideoCommand ?? (this._addVideoCommand = new DelegateCommand<object>(para => this.AddVideoExectued(para)));
}
}
private ICommand _addOutLineTextCommand;
public ICommand AddOutLineTextCommand
{
get
{
return this._addOutLineTextCommand ?? (this._addOutLineTextCommand = new DelegateCommand<object>(para => this.AddOutLineTextExecuted(para)));
}
}
private ICommand _addBarcodeCommand;
public ICommand AddBarcodeCommand
{
get
{
return this._addBarcodeCommand ?? (this._addBarcodeCommand = new DelegateCommand<object>(para => this.AddBarcodeExecuted(para)));
}
}
}
private ICommand _aboutCommand;
public ICommand AboutCommand
@@ -525,47 +414,42 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|| e.PropertyName == nameof(ShapeViewModel)
|| e.PropertyName == nameof(QuickThemeViewModel)
|| e.PropertyName == nameof(LockObjectViewModel)
|| e.PropertyName == nameof(SelectedItem))
|| e.PropertyName == nameof(SelectedItemViewModel))
{
RaisePropertyChanged(e.PropertyName);
}
if (PageViewModel == null) return;
if (PageViewModel == null || PageViewModel.DiagramViewModel == null) return;
if (sender is IFontViewModel)
PageViewModel.SetFont(sender as IFontViewModel, e.PropertyName);
if (sender is IColorViewModel)
PageViewModel.SetColor(sender as IColorViewModel, e.PropertyName);
if (sender is IShapeViewModel)
PageViewModel.SetSharp(sender as IShapeViewModel, e.PropertyName);
if (sender is IQuickThemeViewModel)
PageViewModel.SetQuickItem(sender as IQuickThemeViewModel, e.PropertyName);
if (sender is LockObject)
PageViewModel.LockAction(sender as LockObject, e.PropertyName);
if (sender is DesignerItemViewModelBase designer
&& (e.PropertyName == nameof(designer.Angle)
|| e.PropertyName == nameof(designer.ItemWidth)
|| e.PropertyName == nameof(designer.ItemHeight)
|| e.PropertyName == nameof(designer.ScaleX)
|| e.PropertyName == nameof(designer.ScaleY)))
{
PageViewModel.SetPropertyValue(designer, e.PropertyName);
PageViewModel.DiagramViewModel.SetFont(sender as IFontViewModel, e.PropertyName, PageViewModel.DiagramViewModel.SelectedItems);
}
else if (sender is IColorViewModel)
{
PageViewModel.DiagramViewModel.SetColor(sender as IColorViewModel, e.PropertyName, PageViewModel.DiagramViewModel.SelectedItems);
}
else if (sender is IShapeViewModel)
{
PageViewModel.DiagramViewModel.SetSharp(sender as IShapeViewModel, e.PropertyName, PageViewModel.DiagramViewModel.SelectedItems);
}
else if (sender is IQuickThemeViewModel)
{
PageViewModel.DiagramViewModel.SetQuickItem(sender as IQuickThemeViewModel, e.PropertyName, PageViewModel.DiagramViewModel.SelectedItems);
}
else if (sender is LockObject)
{
PageViewModel.DiagramViewModel.LockAction(sender as LockObject, e.PropertyName, PageViewModel.DiagramViewModel.SelectedItems);
}
else if (sender is SelectableDesignerItemViewModelBase designer)
{
PageViewModel.DiagramViewModel.SetPropertyValue(designer, e.PropertyName, PageViewModel.DiagramViewModel.SelectedItems);
}
}
public bool KeyExecuted(KeyEventArgs e)
{
//if (PageViewModel?.DiagramViewModel?.ExecuteShortcut(e) == true)
//{
// return true;
//}
var para = e.KeyboardDevice.Modifiers == ModifierKeys.None ? e.Key.ToString() : e.KeyboardDevice.Modifiers.ToString() + "+" + e.Key.ToString();
bool executed = true;
switch (para)
@@ -577,22 +461,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
}
return executed;
}
private void UnDoExecuted()
{
PageViewModel?.DiagramViewModel?.UndoCommand.Execute(null);
}
private void ReDoExecuted()
{
PageViewModel?.DiagramViewModel?.RedoCommand.Execute(null);
}
private void SelectedAllExecuted()
{
PageViewModel?.DiagramViewModel?.SelectAllCommand.Execute(null);
}
}
private void OpenExecuted(string para = null)
{
@@ -789,75 +658,15 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
LockObjectViewModel.LockObject.ForEach(p => p.IsChecked = false);
}
private void AddPageExecuted(object para)
{
PageViewModel?.AddPageExecuted(para);
}
private void AddCopyPageExecuted(object para)
{
PageViewModel?.AddCopyPageExecuted(para);
}
private void RenamePageExecuted(object para)
{
PageViewModel?.RenamePageExecuted(para);
}
private void EndRenamePageExecuted(object para)
{
PageViewModel?.EndRenamePageExecuted(para);
}
private void DeletePageExecuted(object para)
{
PageViewModel?.DeletePageExecuted(para);
}
private void AddImageExecuted(object para)
{
PageViewModel?.AddImageExecuted(para);
}
private void EditImageExecuted(object para)
{
PageViewModel?.EditImageExecuted(PageViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault());
}
private void ResizeImageExecuted(object para)
{
PageViewModel?.ResizeImageExecuted(PageViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault());
}
private void ResetImageExecuted(object para)
{
PageViewModel?.ResetImageExecuted(PageViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault());
}
private void AddVideoExectued(object para)
{
PageViewModel?.AddVideoExecuted(para);
}
private void AddOutLineTextExecuted(object para)
{
PageViewModel?.AddOutLineTextExecuted(para);
}
private void AddBarcodeExecuted(object para)
{
PageViewModel?.AddBarcodeExecuted(para);
}
private void SelectedColorExecuted(object para)
{
if (para == null) return;
switch (ColorType)
{
case Models.ColorType.Text: PageViewModel?.SetFont(new FontViewModel() { FontColor = (Color)para }, "FontColor"); break;
case Models.ColorType.Fill: PageViewModel?.SetColor(new ColorViewModel() { FillColor = new ColorObject() { Color = (Color)para } }, "FillColor"); break;
case Models.ColorType.Line: PageViewModel?.SetColor(new ColorViewModel() { LineColor = new ColorObject() { Color = (Color)para } }, "LineColor"); break;
case Models.ColorType.Text: PageViewModel?.DiagramViewModel?.SetFont(new FontViewModel() { FontColor = (Color)para }, "FontColor", PageViewModel.DiagramViewModel.SelectedItems); break;
case Models.ColorType.Fill: PageViewModel?.DiagramViewModel?.SetColor(new ColorViewModel() { FillColor = new ColorObject() { Color = (Color)para } }, "FillColor", PageViewModel.DiagramViewModel.SelectedItems); break;
case Models.ColorType.Line: PageViewModel?.DiagramViewModel?.SetColor(new ColorViewModel() { LineColor = new ColorObject() { Color = (Color)para } }, "LineColor", PageViewModel.DiagramViewModel.SelectedItems); break;
}
}

View File

@@ -25,6 +25,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
{
public partial class PageViewModel : BindableBase
{
#region
protected IDiagramServiceProvider _service
{
get
@@ -71,14 +72,14 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
InitDiagramViewModel();
}
#endregion
#region
public string FileName
{
get; set;
}
#region
private string _title;
public string Title
{
@@ -172,15 +173,124 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
}
#endregion
#region
#region
private ICommand _addPageCommand;
public ICommand AddPageCommand
{
get
{
return this._addPageCommand ?? (this._addPageCommand = new DelegateCommand<object>(para => this.AddPageExecuted(para)));
}
}
private ICommand _addCopyPageCommand;
public ICommand AddCopyPageCommand
{
get
{
return this._addCopyPageCommand ?? (this._addCopyPageCommand = new DelegateCommand<object>(para => this.AddCopyPageExecuted(para)));
}
}
private ICommand _renamePageCommand;
public ICommand RenamePageCommand
{
get
{
return this._renamePageCommand ?? (this._renamePageCommand = new DelegateCommand<object>(para => this.RenamePageExecuted(para)));
}
}
private ICommand _endRenamePageCommand;
public ICommand EndRenamePageCommand
{
get
{
return this._endRenamePageCommand ?? (this._endRenamePageCommand = new DelegateCommand<object>(para => this.EndRenamePageExecuted(para)));
}
}
private ICommand _deletePageCommand;
public ICommand DeletePageCommand
{
get
{
return this._deletePageCommand ?? (this._deletePageCommand = new DelegateCommand<object>(para => this.DeletePageExecuted(para)));
}
}
private ICommand _addImageCommand;
public ICommand AddImageCommand
{
get
{
return this._addImageCommand ?? (this._addImageCommand = new DelegateCommand<object>(para => this.AddImageExecuted(para)));
}
}
private ICommand _editImageCommand;
public ICommand EditImageCommand
{
get
{
return this._editImageCommand ?? (this._editImageCommand = new DelegateCommand<object>(para => this.EditImageExecuted(para)));
}
}
private ICommand _resizeImageCommand;
public ICommand ResizeImageCommand
{
get
{
return this._resizeImageCommand ?? (this._resizeImageCommand = new DelegateCommand<object>(para => this.ResizeImageExecuted(para)));
}
}
private ICommand _resetImageCommand;
public ICommand ResetImageCommand
{
get
{
return this._resetImageCommand ?? (this._resetImageCommand = new DelegateCommand<object>(para => this.ResetImageExecuted(para)));
}
}
private ICommand _addVideoCommand;
public ICommand AddVideoCommand
{
get
{
return this._addVideoCommand ?? (this._addVideoCommand = new DelegateCommand<object>(para => this.AddVideoExectued(para)));
}
}
private ICommand _addOutLineTextCommand;
public ICommand AddOutLineTextCommand
{
get
{
return this._addOutLineTextCommand ?? (this._addOutLineTextCommand = new DelegateCommand<object>(para => this.AddOutLineTextExecuted(para)));
}
}
private ICommand _addBarcodeCommand;
public ICommand AddBarcodeCommand
{
get
{
return this._addBarcodeCommand ?? (this._addBarcodeCommand = new DelegateCommand<object>(para => this.AddBarcodeExecuted(para)));
}
}
#endregion
#region
private void DiagramViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsSelected")
{
_service.SelectedItems = DiagramViewModel?.SelectedItems;
_service.SelectedItem = DiagramViewModel?.SelectedItem;
_service.SelectedItemViewModel = CopyHelper.Mapper(DiagramViewModel?.SelectedItem);
}
var property = sender.GetType().GetProperty(e.PropertyName);
@@ -195,6 +305,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
#endregion
#region
protected virtual bool AddVerify(SelectableDesignerItemViewModelBase arg)
{
return true;
@@ -356,84 +467,6 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
return true;
}
private bool ItemsToDeleteHasConnector(List<SelectableDesignerItemViewModelBase> itemsToRemove, ConnectorInfoBase connector)
{
if (connector is FullyCreatedConnectorInfo fully)
{
return itemsToRemove.Contains(fully.DataItem);
}
return false;
}
#region
public void SetPropertyValue(SelectableDesignerItemViewModelBase selectable, string propertyName)
{
foreach (var item in DiagramViewModel.SelectedItems)
{
if (item != selectable)
{
CopyHelper.CopyPropertyValue(selectable, item, propertyName);
}
}
}
public void SetFont(IFontViewModel fontViewModel, string propertyName)
{
foreach (var item in DiagramViewModel.SelectedItems)
{
if (item.FontViewModel != fontViewModel)
{
CopyHelper.CopyPropertyValue(fontViewModel, item.FontViewModel, propertyName);
}
}
}
public void SetColor(IColorViewModel colorViewModel, string propertyName)
{
foreach (var item in DiagramViewModel.SelectedItems)
{
if (item.ColorViewModel != colorViewModel)
{
CopyHelper.CopyPropertyValue(colorViewModel, item.ColorViewModel, propertyName);
}
}
}
public void SetSharp(IShapeViewModel shapeViewModel, string propertyName)
{
foreach (var item in DiagramViewModel.SelectedItems)
{
if (item.ShapeViewModel != shapeViewModel)
{
CopyHelper.CopyPropertyValue(shapeViewModel, item.ShapeViewModel, propertyName);
}
}
}
public void SetQuickItem(IQuickThemeViewModel quickThemeViewModel, string propertyName)
{
if (propertyName == nameof(QuickTheme) && quickThemeViewModel.QuickTheme != null)
{
foreach (var item in DiagramViewModel.SelectedItems)
{
SetFont(quickThemeViewModel.QuickTheme.FontViewModel, "FontColor");
SetColor(quickThemeViewModel.QuickTheme.ColorViewModel, "FillColor");
SetColor(quickThemeViewModel.QuickTheme.ColorViewModel, "LineColor");
SetColor(quickThemeViewModel.QuickTheme.ColorViewModel, "LineWidth");
}
quickThemeViewModel.QuickTheme = null;
}
}
public void LockAction(LockObject lockObject, string propertyName)
{
foreach (var item in DiagramViewModel?.SelectedItems)
{
item.LockObjectViewModel.SetValue(lockObject);
}
}
public virtual void AddPageExecuted(object para)
{
int index = 0;
@@ -550,6 +583,11 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
public void EditImageExecuted(object para)
{
if (para == null)
{
para = DiagramViewModel.SelectedItem;
}
ImageItemViewModel itemBase = para as ImageItemViewModel;
if (itemBase != null)
{
@@ -559,6 +597,11 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
public void ResizeImageExecuted(object para)
{
if (para == null)
{
para = DiagramViewModel.SelectedItem;
}
ImageItemViewModel itemBase = para as ImageItemViewModel;
if (itemBase != null)
{
@@ -568,6 +611,10 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
public void ResetImageExecuted(object para)
{
if (para == null)
{
para = DiagramViewModel.SelectedItem;
}
ImageItemViewModel itemBase = para as ImageItemViewModel;
if (itemBase != null)
{
@@ -575,7 +622,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
}
}
public void AddVideoExecuted(object para)
public void AddVideoExectued(object para)
{
VideoItemViewModel itemBase = new VideoItemViewModel();
DiagramViewModel?.AddItemCommand.Execute(itemBase);
@@ -604,20 +651,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
_service.DrawModeViewModel.CursorMode = CursorMode.Move;
}
}
#endregion
private Size MeasureString(OutLineTextDesignerItemViewModel itemBase)
{
var formattedText = new FormattedText(
itemBase.Text,
CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
new Typeface(new FontFamily(itemBase.FontViewModel.FontFamily), itemBase.FontViewModel.FontStyle, itemBase.FontViewModel.FontWeight, itemBase.FontViewModel.FontStretch),
itemBase.FontViewModel.FontSize,
Brushes.Black);
return new Size(formattedText.Width, formattedText.Height);
}
#endregion
public virtual void Dispose()
{

View File

@@ -28,15 +28,11 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
{
public class ToolBoxViewModel : BindableBase
{
private IDiagramServiceProvider _service
{
get
{
return DiagramServicesProvider.Instance.Provider;
}
}
public ToolBoxViewModel()
private MainWindowViewModel _mainWindowViewModel;
public ToolBoxViewModel(MainWindowViewModel mainWindowViewModel)
{
_mainWindowViewModel = mainWindowViewModel;
Init();
}
@@ -298,14 +294,14 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
private void AddMyItem()
{
if (_service.SelectedItems != null)
if (_mainWindowViewModel?.PageViewModel?.DiagramViewModel != null)
{
DiagramDocument diagramDocument = new DiagramDocument();
diagramDocument.DiagramItems = new List<DiagramItem>();
DiagramItem diagramItem = new DiagramItem();
var selectedDesignerItems = _service.SelectedItems.OfType<DesignerItemViewModelBase>();
var selectedConnections = _service.SelectedItems.OfType<ConnectionViewModel>();
var selectedDesignerItems = _mainWindowViewModel?.PageViewModel?.DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>();
var selectedConnections = _mainWindowViewModel?.PageViewModel?.DiagramViewModel.SelectedItems.OfType<ConnectionViewModel>();
diagramItem.DesignerItems = selectedDesignerItems.Select(p => p.ToSerializableItem(".json")).Where(p => p != null).ToList();
diagramItem.Connections = selectedConnections.Select(p => p.ToSerializableItem(".json")).Where(p => p != null).ToList();

View File

@@ -1020,21 +1020,21 @@
<Fluent:Button Margin="5" Command="{Binding PageViewModel.DiagramViewModel.DistributeVerticalCommand}" Size="Small" Icon="/AIStudio.Wpf.DiagramApp;component/Images/DistributeObjectsVertical.png"/>
</StackPanel>
</Fluent:DropDownButton>
<Fluent:SplitButton Header="翻转" Icon="{iconPacks:VaadinIcons Kind=FlipH}" Width="50" VerticalAlignment="Top" IsCheckable="True" IsChecked="{Binding SelectedItem.ShowRotate}">
<Fluent:SplitButton Header="翻转" Icon="{iconPacks:VaadinIcons Kind=FlipH}" Width="50" VerticalAlignment="Top" IsCheckable="True" IsChecked="{Binding SelectedItemViewModel.ShowRotate}">
<Fluent:SplitButton.LargeIcon>
<iconPacks:PackIconVaadinIcons Kind="FlipH" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:SplitButton.LargeIcon>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="镜像" VerticalAlignment="Center"/>
<Fluent:ToggleButton IsChecked="{Binding PageViewModel.DiagramViewModel.SelectedItem.ScaleX,Converter={dd:ConverterValueMapToBool Parameter='1'}, ConverterParameter='-1'}"
<Fluent:ToggleButton IsChecked="{Binding SelectedItemViewModel.ScaleX,Converter={dd:ConverterValueMapToBool Parameter='1'}, ConverterParameter='-1'}"
Margin="5" Size="Small" Icon="{iconPacks:Material Kind=FlipHorizontal}"/>
<Fluent:ToggleButton IsChecked="{Binding PageViewModel.DiagramViewModel.SelectedItem.ScaleY,Converter={dd:ConverterValueMapToBool Parameter='1'}, ConverterParameter='-1'}"
<Fluent:ToggleButton IsChecked="{Binding SelectedItemViewModel.ScaleY,Converter={dd:ConverterValueMapToBool Parameter='1'}, ConverterParameter='-1'}"
Margin="5" Size="Small" Icon="{iconPacks:Material Kind=FlipVertical}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="旋转" VerticalAlignment="Center"/>
<controls:SliderRotation Value="{Binding PageViewModel.DiagramViewModel.SelectedItem.Angle,Mode=TwoWay}"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding PageViewModel.DiagramViewModel.SelectedItem.Angle,Mode=TwoWay}" Maximum="359" Minimum="0"
<controls:SliderRotation Value="{Binding SelectedItemViewModel.Angle,Mode=TwoWay}"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding SelectedItemViewModel.Angle,Mode=TwoWay}" Maximum="359" Minimum="0"
Format="0 deg" />
</StackPanel>
</Fluent:SplitButton>
@@ -1045,19 +1045,19 @@
<TextBlock Margin="5" Text="大小" />
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="宽" Width="15" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding PageViewModel.DiagramViewModel.SelectedItem.ItemWidth,Mode=TwoWay}" Minimum="0"
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding SelectedItemViewModel.ItemWidth,Mode=TwoWay}" Minimum="0"
Format="0" />
<TextBlock Margin="5" Text="高" Width="15" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding PageViewModel.DiagramViewModel.SelectedItem.ItemHeight,Mode=TwoWay}" Minimum="0"
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding SelectedItemViewModel.ItemHeight,Mode=TwoWay}" Minimum="0"
Format="0" />
</StackPanel>
<TextBlock Margin="5" Text="X/Y位置"/>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="X" Width="15" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding PageViewModel.DiagramViewModel.SelectedItem.Left,Mode=TwoWay}" Minimum="0"
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding SelectedItemViewModel.Left,Mode=TwoWay}" Minimum="0"
Format="0" />
<TextBlock Margin="5" Text="Y" Width="15" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding PageViewModel.DiagramViewModel.SelectedItem.Top,Mode=TwoWay}" Minimum="0"
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding SelectedItemViewModel.Top,Mode=TwoWay}" Minimum="0"
Format="0" />
</StackPanel>
<Separator />
@@ -1328,7 +1328,7 @@
ItemWidth="45"
ItemHeight="56"
ItemsSource="{Binding QuickThemeViewModel.QuickThemes}"
SelectedItem="{Binding QuickThemeViewModel.QuickTheme}"
SelectedItem="{Binding QuickThemeViewModel.QuickTheme,Delay=100}"
ResizeMode="Both"
Selectable="False">
<Fluent:InRibbonGallery.ItemTemplate>
@@ -1349,12 +1349,12 @@
<Fluent:RibbonTabItem Header="插入">
<Fluent:RibbonGroupBox Header="插入"
IsLauncherVisible="True">
<Fluent:SplitButton Header="空白页" Width="50" VerticalAlignment="Top" Command="{Binding AddPageCommand}">
<Fluent:SplitButton Header="空白页" Width="50" VerticalAlignment="Top" Command="{Binding PageViewModel.AddPageCommand}">
<Fluent:SplitButton.LargeIcon>
<iconPacks:PackIconMaterial Kind="FileOutline" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:SplitButton.LargeIcon>
<Fluent:MenuItem Header="空白页" Size="Middle" Command="{Binding AddPageCommand}" Icon="{iconPacks:Material Kind=FileOutline}"/>
<Fluent:MenuItem Header="复制本页" Size="Middle" Command="{Binding AddCopyPageCommand}" Icon="{iconPacks:Material Kind=ContentCopy}"/>
<Fluent:MenuItem Header="空白页" Size="Middle" Command="{Binding PageViewModel.AddPageCommand}" Icon="{iconPacks:Material Kind=FileOutline}"/>
<Fluent:MenuItem Header="复制本页" Size="Middle" Command="{Binding PageViewModel.AddCopyPageCommand}" Icon="{iconPacks:Material Kind=ContentCopy}"/>
<Fluent:SplitButton.ToolTip>
<Fluent:ScreenTip Title="InsertPage"
Text="插入页面"
@@ -1372,7 +1372,7 @@
Width="190" />
</Fluent:SplitButton.ToolTip>
</Fluent:SplitButton>
<Fluent:Button Header="图片" Width="50" VerticalAlignment="Top" Command="{Binding AddImageCommand}">
<Fluent:Button Header="图片" Width="50" VerticalAlignment="Top" Command="{Binding PageViewModel.AddImageCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Image" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -1392,7 +1392,7 @@
Width="190" />
</Fluent:Button.ToolTip>
</Fluent:Button>
<Fluent:Button Header="矢量文本" Width="50" VerticalAlignment="Top" Command="{Binding AddOutLineTextCommand}">
<Fluent:Button Header="矢量文本" Width="50" VerticalAlignment="Top" Command="{Binding PageViewModel.AddOutLineTextCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="FormatTextVariantOutline" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -1412,7 +1412,7 @@
Width="190" />
</Fluent:SplitButton.ToolTip>
</Fluent:SplitButton>
<Fluent:Button Header="二维码" Width="50" VerticalAlignment="Top" Command="{Binding AddBarcodeCommand}" CommandParameter="QR_CODE">
<Fluent:Button Header="二维码" Width="50" VerticalAlignment="Top" Command="{Binding PageViewModel.AddBarcodeCommand}" CommandParameter="QR_CODE">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Qrcode" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -1468,7 +1468,7 @@
</Fluent:RibbonGroupBox>
<Fluent:RibbonGroupBox Header="其它"
IsLauncherVisible="True" >
<Fluent:Button Header="搜索" Width="50" VerticalAlignment="Top" Command="{Binding SearchDownCommand}">
<Fluent:Button Header="搜索" Width="50" VerticalAlignment="Top" Command="{Binding PageViewModel.DiagramViewModel.SearchDownCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconFontAwesome Kind="SearchSolid" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -2523,20 +2523,20 @@
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="增加页" Command="{binding:ControlBinding AddPageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="复制页" Command="{binding:ControlBinding AddCopyPageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="重命名页" Command="{binding:ControlBinding RenamePageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="删除页" Command="{binding:ControlBinding DeletePageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="增加页" Command="{binding:ControlBinding PageViewModel.AddPageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="复制页" Command="{binding:ControlBinding PageViewModel.AddCopyPageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="重命名页" Command="{binding:ControlBinding PageViewModel.RenamePageCommand}" CommandParameter="{Binding .}"/>
<MenuItem Header="删除页" Command="{binding:ControlBinding PageViewModel.DeletePageCommand}" CommandParameter="{Binding .}"/>
</ContextMenu>
</Grid.ContextMenu>
<TextBlock Text="{Binding Name}" Visibility="{Binding IsEditName,Converter={StaticResource Boolean2VisibilityReConverter}}">
<TextBlock.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{binding:ControlBinding RenamePageCommand}" CommandParameter="{Binding .}"/>
<MouseBinding MouseAction="LeftDoubleClick" Command="{binding:ControlBinding PageViewModel.RenamePageCommand}" CommandParameter="{Binding .}"/>
</TextBlock.InputBindings>
</TextBlock>
<TextBox x:Name="renametextbox" Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding IsEditName,Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{binding:ControlBinding EndRenamePageCommand}" CommandParameter="{Binding .}"/>
<KeyBinding Key="Enter" Command="{binding:ControlBinding PageViewModel.EndRenamePageCommand}" CommandParameter="{Binding .}"/>
</TextBox.InputBindings>
<TextBox.Style>
<Style TargetType="TextBox">
@@ -2549,7 +2549,7 @@
</TextBox.Style>
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<i:InvokeCommandAction Command="{binding:ControlBinding EndRenamePageCommand}" CommandParameter="{Binding .}" />
<i:InvokeCommandAction Command="{binding:ControlBinding PageViewModel.EndRenamePageCommand}" CommandParameter="{Binding .}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
@@ -2558,18 +2558,18 @@
</ListBox.ItemTemplate>
</ListBox>
<Fluent:Button Size="Small" Icon="{iconPacks:Material Kind=Plus}"
Command="{Binding AddPageCommand}"/>
Command="{Binding PageViewModel.AddPageCommand}"/>
</StackPanel>
</Fluent:StatusBarItem>
<Separator HorizontalAlignment="Left" />
<Fluent:StatusBarItem Title="Color" Visibility="{Binding SelectedItem,Converter={StaticResource NullableToVisibilityConverter}}"
<Fluent:StatusBarItem Title="Color" Visibility="{Binding SelectedItemViewModel,Converter={StaticResource NullableToVisibilityConverter}}"
HorizontalAlignment="Right" >
<StackPanel Orientation="Horizontal" >
<TextBlock>形状ID</TextBlock>
<TextBox BorderThickness="0" IsReadOnly="True" Background="Transparent" Foreground="White"
Text="{Binding SelectedItem.Id}"/>
Text="{Binding SelectedItemViewModel.Id}"/>
</StackPanel>
</Fluent:StatusBarItem>

View File

@@ -31,8 +31,6 @@ namespace AIStudio.Wpf.DiagramApp
{
InitializeComponent();
this.HookEvents();
MainWindowViewModel = new MainWindowViewModel();
this.DataContext = MainWindowViewModel;
this.Closing += MainWindow_Closing;
@@ -44,32 +42,12 @@ namespace AIStudio.Wpf.DiagramApp
e.Handled = MainWindowViewModel.KeyExecuted(e);
}
private void HookEvents()
{
//this.PreviewMouseWheel += this.OnPreviewMouseWheel;
}
private void ZoomSlider_OnValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
var textFormattingMode = e.NewValue > 1.0 || Math.Abs(e.NewValue - 1.0) < double.Epsilon ? TextFormattingMode.Ideal : TextFormattingMode.Display;
TextOptions.SetTextFormattingMode(this, textFormattingMode);
}
//private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
//{
// if (Keyboard.IsKeyDown(Key.LeftCtrl) == false
// && Keyboard.IsKeyDown(Key.RightCtrl) == false)
// {
// return;
// }
// var newZoomValue = this.zoomSlider.Value + (e.Delta > 0 ? 0.1 : -0.1);
// this.zoomSlider.Value = Math.Max(Math.Min(newZoomValue, this.zoomSlider.Maximum), this.zoomSlider.Minimum);
// e.Handled = true;
//}
private void btnPrint_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();

View File

@@ -23,7 +23,7 @@
<TabControl Style="{StaticResource UniformTabControlStyle}" >
<TabItem Header="填充" Height="34">
<StackPanel
DataContext="{Binding SelectedItem.ColorViewModel.FillColor}"
DataContext="{Binding PageViewModel.DiagramViewModel.SelectedItem.ColorViewModel.FillColor}"
Visibility="{Binding .,Converter={StaticResource NullableToVisibilityConverter}}">
<StackPanel>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={dd:ConverterValueMapToBool Parameter='None'}, ConverterParameter='None'}" Content="无填充" />
@@ -104,7 +104,7 @@
</TabItem>
<TabItem Header="线条" Height="34">
<StackPanel
DataContext="{Binding SelectedItem.ColorViewModel.LineColor}"
DataContext="{Binding PageViewModel.DiagramViewModel.SelectedItem.ColorViewModel.LineColor}"
Visibility="{Binding .,Converter={StaticResource NullableToVisibilityConverter}}">
<StackPanel>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={dd:ConverterValueMapToBool Parameter='None'}, ConverterParameter='None'}" Content="无线条" />
@@ -198,21 +198,21 @@
<TabControl Style="{StaticResource UniformTabControlStyle}">
<TabItem Header="图片" Height="34">
<UniformGrid Columns="2" VerticalAlignment="Top">
<Fluent:Button Header="插入图片" VerticalAlignment="Top" Command="{Binding AddImageCommand}">
<Fluent:Button Header="插入图片" VerticalAlignment="Top" Command="{Binding PageViewModel.AddImageCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Image" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
</Fluent:Button>
<Fluent:Button Header="改变图片" VerticalAlignment="Top" Command="{Binding EditImageCommand}">
<Fluent:Button Header="改变图片" VerticalAlignment="Top" Command="{Binding PageViewModel.EditImageCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="ImageEdit" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
</Fluent:Button>
<Fluent:SplitButton Header="图片裁剪" VerticalAlignment="Top" HorizontalAlignment="Stretch" Command="{Binding ResizeImageCommand}">
<Fluent:SplitButton Header="图片裁剪" VerticalAlignment="Top" HorizontalAlignment="Stretch" Command="{Binding PageViewModel.ResizeImageCommand}">
<Fluent:SplitButton.LargeIcon>
<iconPacks:PackIconMaterial Kind="ImagePlus" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:SplitButton.LargeIcon>
<ListBox dd:EnumHelper.Enum="{x:Type dd:ClipMode}" SelectedItem="{Binding SelectedItem.ClipMode}" BorderThickness="0">
<ListBox dd:EnumHelper.Enum="{x:Type dd:ClipMode}" SelectedItem="{Binding PageViewModel.DiagramViewModel.SelectedItem.ClipMode}" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
@@ -220,7 +220,7 @@
</ListBox.ItemTemplate>
</ListBox>
</Fluent:SplitButton>
<Fluent:Button Header="原始图" VerticalAlignment="Top" Command="{Binding ResetImageCommand}">
<Fluent:Button Header="原始图" VerticalAlignment="Top" Command="{Binding PageViewModel.ResetImageCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="ImageRemove" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -229,7 +229,7 @@
</TabItem>
<TabItem Header="视频" Height="34">
<UniformGrid Columns="2" VerticalAlignment="Top">
<Fluent:Button Header="插入视频" VerticalAlignment="Top" Command="{Binding AddVideoCommand}">
<Fluent:Button Header="插入视频" VerticalAlignment="Top" Command="{Binding PageViewModel.AddVideoCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Video" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -238,12 +238,12 @@
</TabItem>
<TabItem Header="二维码" Height="34">
<UniformGrid Columns="2" VerticalAlignment="Top">
<Fluent:Button Header="插入二维码" VerticalAlignment="Top" Command="{Binding AddBarcodeCommand}" CommandParameter="QR_CODE">
<Fluent:Button Header="插入二维码" VerticalAlignment="Top" Command="{Binding PageViewModel.AddBarcodeCommand}" CommandParameter="QR_CODE">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Qrcode" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
</Fluent:Button>
<Fluent:Button Header="插入条形码" VerticalAlignment="Top" Command="{Binding AddBarcodeCommand}" CommandParameter="CODE_39">
<Fluent:Button Header="插入条形码" VerticalAlignment="Top" Command="{Binding PageViewModel.AddBarcodeCommand}" CommandParameter="CODE_39">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Barcode" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
@@ -254,7 +254,7 @@
</ControlTemplate>
<ControlTemplate TargetType="Control" x:Key="PropertyTemplate">
<dd:PropertiesView SelectedObject="{Binding SelectedItem}">
<dd:PropertiesView SelectedObject="{Binding PageViewModel.DiagramViewModel.SelectedItem}">
<dd:PropertiesView.Resources>
<Style x:Key="ActTypeStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">