整理一下项目文件

This commit is contained in:
艾竹
2022-10-28 22:45:39 +08:00
parent 334297b074
commit 513937c1d6
598 changed files with 684 additions and 544 deletions

View File

@@ -0,0 +1,86 @@
<UserControl x:Class="AIStudio.Wpf.DiagramApp.Views.AboutControl"
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:AIStudio.Wpf.DiagramApp.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<FlowDocumentScrollViewer VerticalScrollBarVisibility="Auto">
<FlowDocument>
<Paragraph>AIStudio.Wpf.Diagram 1.0.0.0
<Figure Width="150">
<BlockUIContainer>
<Image Source="pack://application:,,,/AIStudio.Wpf.DiagramApp;component/Images/diagram.png" />
</BlockUIContainer>
</Figure>
</Paragraph>
<Paragraph>功能暂未全部完成,持续更新中,敬请期待!!!</Paragraph>
<Paragraph>
本画板在WPF-Diagram-Designer进行的开发界面框架使用Fluent.Ribbon的框架。
<LineBreak />
实现的功能有:
<LineBreak />
Drag
<LineBreak />
resize
<LineBreak />
rotate
<LineBreak />
设计面板(Designer Canvas variable size, scrollable)
<LineBreak />
缩略图Zoombox
<LineBreak />
框线选择Rubberband selection
<LineBreak />
Toolbox (drag &amp; drop)
<LineBreak />
Connecting items
<LineBreak />
Open, Save
<LineBreak />
Cut, Copy, Paste, Delete
<LineBreak />
Print
<LineBreak />
Group, Ungroup
<LineBreak />
Align (Left, Right, Top, Bottom, Centered horizontal, Centered vertical)
<LineBreak />
Distribute (horizontal, vertical)
<LineBreak />
Order (Bring forward, Bring to top, Send backward, Send to back)
<LineBreak />
<Figure Width="150">
<BlockUIContainer>
<Image Source="pack://application:,,,/AIStudio.Wpf.DiagramApp;component/Images/contactme.png" />
</BlockUIContainer>
</Figure>
相关链接:
<LineBreak />
本框架链接,欢迎点星支持:
<Hyperlink NavigateUri="https://gitee.com/akwkevin/aistudio.-wpf.-diagram">https://gitee.com/akwkevin/aistudio.-wpf.-diagram</Hyperlink>
<LineBreak />
个人GitHub,欢迎点星支持:
<Hyperlink NavigateUri="https://gitee.com/akwkevin">https://gitee.com/akwkevin</Hyperlink>
<LineBreak />
个人博客:
<Hyperlink NavigateUri="https://www.cnblogs.com/akwkevin/">https://www.cnblogs.com/akwkevin/</Hyperlink>
<LineBreak />
Fluent.Ribbon:
<Hyperlink NavigateUri="https://github.com/fluentribbon/Fluent.Ribbon">https://github.com/fluentribbon/Fluent.Ribbon</Hyperlink>
<LineBreak />
WPF-Diagram-Designer:
<Hyperlink NavigateUri="https://github.com/LinRaise/WPF-Diagram-Designer">https://github.com/LinRaise/WPF-Diagram-Designer</Hyperlink>
<LineBreak />
<LineBreak />
个人QQ:80267720(欢迎技术交流及技术合作)
<LineBreak />
QQ技术交流群:51286643
</Paragraph>
</FlowDocument>
</FlowDocumentScrollViewer>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
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;
namespace AIStudio.Wpf.DiagramApp.Views
{
/// <summary>
/// AboutControl.xaml 的交互逻辑
/// </summary>
public partial class AboutControl : UserControl
{
public AboutControl()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,16 @@
<Window x:Class="AIStudio.Wpf.DiagramApp.Views.AboutWindow"
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:local="clr-namespace:AIStudio.Wpf.DiagramApp.Views"
mc:Ignorable="d"
Icon="/AIStudio.Wpf.DiagramApp;component/Icons/App.ico"
Title="关于AIStudio.Wpf.DiagramApp"
Height="650" Width="900"
WindowStartupLocation="CenterScreen"
Topmost="True" >
<Grid>
<local:AboutControl/>
</Grid>
</Window>

View File

@@ -0,0 +1,27 @@
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.Shapes;
namespace AIStudio.Wpf.DiagramApp.Views
{
/// <summary>
/// AboutWindow.xaml 的交互逻辑
/// </summary>
public partial class AboutWindow : Window
{
public AboutWindow()
{
InitializeComponent();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,103 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using AIStudio.Wpf.DiagramApp.ViewModels;
using ControlzEx.Theming;
using Fluent;
using Fluent.Localization;
using Button = Fluent.Button;
namespace AIStudio.Wpf.DiagramApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : RibbonWindow
{
private MainWindowViewModel MainWindowViewModel;
public MainWindow()
{
InitializeComponent();
this.HookEvents();
MainWindowViewModel = new MainWindowViewModel();
this.DataContext = MainWindowViewModel;
this.Closing += MainWindow_Closing;
}
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
e.Handled = MainWindowViewModel.KeyExecuted(e.KeyboardDevice.Modifiers == ModifierKeys.None ? e.Key.ToString() : e.KeyboardDevice.Modifiers.ToString() + "+" + e.Key.ToString());
}
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();
if (true == printDialog.ShowDialog())
{
printDialog.PrintVisual(this.table, "WPF Diagram");
}
}
private void btnExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult result = MessageBox.Show("确定要退出系统?", "退出", MessageBoxButton.OKCancel);
if (result != MessageBoxResult.OK)
{
e.Cancel = true;
}
else
{
System.Windows.Application.Current.Shutdown();
}
}
}
}

View File

@@ -0,0 +1,344 @@
<UserControl x:Class="AIStudio.Wpf.DiagramApp.Views.PropertyControl"
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:Fluent="urn:fluent-ribbon"
xmlns:controls="clr-namespace:AIStudio.Wpf.DiagramHelper.Controls;assembly=AIStudio.Wpf.DiagramHelper"
xmlns:views="clr-namespace:AIStudio.Wpf.DiagramApp.Views"
xmlns:converter="clr-namespace:AIStudio.Wpf.DiagramHelper.Converters;assembly=AIStudio.Wpf.DiagramHelper"
xmlns:helper="clr-namespace:AIStudio.Wpf.DiagramHelper.Helpers;assembly=AIStudio.Wpf.DiagramHelper"
xmlns:dd="https://astudio.github.io/diagram"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:flowchart="clr-namespace:AIStudio.Wpf.Flowchart;assembly=AIStudio.Wpf.Flowchart"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<converter:NullableToBooleanConverter x:Key="NullableToBooleanConverter"/>
<converter:NullableToVisibilityConverter x:Key="NullableToVisibilityConverter" />
<dd:EnumDescriptionConverter x:Key="EnumDescriptionConverter"/>
<ControlTemplate TargetType="Control" x:Key="FillTemplate">
<TabControl Style="{StaticResource UniformTabControlStyle}" >
<TabItem Header="填充" Height="34">
<StackPanel
DataContext="{Binding SelectedItem.ColorViewModel.FillColor}"
Visibility="{Binding .,Converter={StaticResource NullableToVisibilityConverter}}">
<StackPanel>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='None'}, ConverterParameter='None'}" Content="无填充" />
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='SolidColorBrush'}, ConverterParameter='SolidColorBrush'}" Content="单色填充"/>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='LinearGradientBrush'}, ConverterParameter='LinearGradientBrush'}" Content="线性渐变填充"/>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='RadialGradientBrush'}, ConverterParameter='RadialGradientBrush'}" Content="径向渐变填充"/>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='DrawingBrush'}, ConverterParameter='DrawingBrush'}" Content="图案填充"/>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='ImageBrush'}, ConverterParameter='ImageBrush'}" Content="图片或纹理填充"/>
</StackPanel>
<DockPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='SolidColorBrush'}">
<!-- The following code shows theme colors mode for color gallery -->
<Fluent:DropDownButton DockPanel.Dock="Right" Margin="5" Height="24" Width="60"
Template="{StaticResource RibbonDropDownButtonControlTemplate1}"
MaxDropDownHeight="500">
<Fluent:DropDownButton.Icon>
<Grid>
<Rectangle Height="22" StrokeThickness="1" Stroke="{DynamicResource Fluent.Ribbon.Brushes.AccentBaseColorBrush}">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}" />
</Rectangle.Fill>
</Rectangle>
</Grid>
</Fluent:DropDownButton.Icon>
<Fluent:ColorGallery SelectedColor="{Binding Color, Mode=TwoWay}"
Mode="StandardColors"
StandardColorGridRows="3"
Columns="10"
ThemeColorGridRows="5"
IsNoColorButtonVisible="True" />
</Fluent:DropDownButton>
<TextBlock Margin="5" VerticalAlignment="Center" Text="颜色"/>
</DockPanel>
<StackPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='LinearGradientBrush^RadialGradientBrush'}">
<DockPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='LinearGradientBrush'}">
<Fluent:ComboBox DockPanel.Dock="Right" Margin="5" Size="Small" Width="140" IsEditable="False" helper:EnumHelper.Enum="{x:Type dd:LinearOrientation}" SelectedItem="{Binding LinearOrientation}">
<Fluent:ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
<TextBlock Text="方向" VerticalAlignment="Center" Margin="5"/>
</DockPanel>
<DockPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='RadialGradientBrush'}">
<Fluent:ComboBox DockPanel.Dock="Right" Margin="5" Size="Small" Width="140" IsEditable="False" helper:EnumHelper.Enum="{x:Type dd:RadialOrientation}" SelectedItem="{Binding RadialOrientation}">
<Fluent:ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
<TextBlock Text="方向" VerticalAlignment="Center" Margin="5"/>
</DockPanel>
<DockPanel>
<Fluent:Spinner DockPanel.Dock="Right" Margin="5" Width="60" Size="Small" Value="{Binding Angle}" Maximum="359" Minimum="0"
Format="0 deg" />
<TextBlock Text="角度" VerticalAlignment="Center" Margin="5"/>
</DockPanel>
<controls:GradientStopControl />
</StackPanel>
<StackPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueSetToOppositeVisibility},ConverterParameter='None'}">
<TextBlock Text="亮度" VerticalAlignment="Center" Margin="5"/>
<DockPanel>
<Fluent:Spinner DockPanel.Dock="Right" Margin="5" Width="60" Size="Small" Value="{Binding Light}" Maximum="1" Minimum="-1"
Format="0 %" />
<Slider Margin="5" Maximum="1" Minimum="-1" Value="{Binding Light}" Style="{StaticResource DefaultSlider}"/>
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueSetToOppositeVisibility},ConverterParameter='None'}">
<TextBlock Text="透明度" VerticalAlignment="Center" Margin="5"/>
<DockPanel>
<Fluent:Spinner DockPanel.Dock="Right" Margin="5" Width="60" Size="Small" Value="{Binding Opacity}" Maximum="1" Minimum="0"
Format="0 %" />
<Slider Margin="5" Maximum="1" Minimum="0" Value="{Binding Opacity}" Style="{StaticResource DefaultSlider}"/>
</DockPanel>
</StackPanel>
</StackPanel>
</TabItem>
<TabItem Header="线条" Height="34">
<StackPanel
DataContext="{Binding SelectedItem.ColorViewModel.LineColor}"
Visibility="{Binding .,Converter={StaticResource NullableToVisibilityConverter}}">
<StackPanel>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='None'}, ConverterParameter='None'}" Content="无线条" />
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='SolidColorBrush'}, ConverterParameter='SolidColorBrush'}" Content="实线"/>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='LinearGradientBrush'}, ConverterParameter='LinearGradientBrush'}" Content="线性渐变填充"/>
<RadioButton Margin="5" IsChecked="{Binding BrushType,Converter={converter:ConverterValueMapToBool Parameter='RadialGradientBrush'}, ConverterParameter='RadialGradientBrush'}" Content="径向渐变填充"/>
</StackPanel>
<DockPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='SolidColorBrush'}">
<!-- The following code shows theme colors mode for color gallery -->
<Fluent:DropDownButton DockPanel.Dock="Right" Margin="5" Height="24" Width="60"
Template="{StaticResource RibbonDropDownButtonControlTemplate1}"
MaxDropDownHeight="500">
<Fluent:DropDownButton.Icon>
<Grid>
<Rectangle Height="22" StrokeThickness="1" Stroke="{DynamicResource Fluent.Ribbon.Brushes.AccentBaseColorBrush}">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}" />
</Rectangle.Fill>
</Rectangle>
</Grid>
</Fluent:DropDownButton.Icon>
<Fluent:ColorGallery SelectedColor="{Binding Color, Mode=TwoWay}"
Mode="StandardColors"
StandardColorGridRows="3"
Columns="10"
ThemeColorGridRows="5"
IsNoColorButtonVisible="True" />
</Fluent:DropDownButton>
<TextBlock Margin="5" VerticalAlignment="Center" Text="颜色"/>
</DockPanel>
<StackPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='LinearGradientBrush^RadialGradientBrush'}">
<DockPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='LinearGradientBrush'}">
<Fluent:ComboBox DockPanel.Dock="Right" Margin="5" Size="Small" Width="140" IsEditable="False" helper:EnumHelper.Enum="{x:Type dd:LinearOrientation}" SelectedItem="{Binding LinearOrientation}">
<Fluent:ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
<TextBlock Text="方向" VerticalAlignment="Center" Margin="5"/>
</DockPanel>
<DockPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueMapSetToVisibility},ConverterParameter='RadialGradientBrush'}">
<Fluent:ComboBox DockPanel.Dock="Right" Margin="5" Size="Small" Width="140" IsEditable="False" helper:EnumHelper.Enum="{x:Type dd:RadialOrientation}" SelectedItem="{Binding RadialOrientation}">
<Fluent:ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</Fluent:ComboBox.ItemTemplate>
</Fluent:ComboBox>
<TextBlock Text="方向" VerticalAlignment="Center" Margin="5"/>
</DockPanel>
<DockPanel>
<Fluent:Spinner DockPanel.Dock="Right" Margin="5" Width="60" Size="Small" Value="{Binding Angle}" Maximum="359" Minimum="0"
Format="0 deg" />
<TextBlock Text="角度" VerticalAlignment="Center" Margin="5"/>
</DockPanel>
<controls:GradientStopControl />
</StackPanel>
<StackPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueSetToOppositeVisibility},ConverterParameter='None'}">
<TextBlock Text="亮度" VerticalAlignment="Center" Margin="5"/>
<DockPanel>
<Fluent:Spinner DockPanel.Dock="Right" Margin="5" Width="60" Size="Small" Value="{Binding Light}" Maximum="1" Minimum="-1"
Format="0 %" />
<Slider Margin="5" Maximum="1" Minimum="-1" Value="{Binding Light}" Style="{StaticResource DefaultSlider}"/>
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding BrushType,Converter={converter:ConverterValueSetToOppositeVisibility},ConverterParameter='None'}">
<TextBlock Text="透明度" VerticalAlignment="Center" Margin="5"/>
<DockPanel>
<Fluent:Spinner DockPanel.Dock="Right" Margin="5" Width="60" Size="Small" Value="{Binding Opacity}" Maximum="1" Minimum="0"
Format="0 %" />
<Slider Margin="5" Maximum="1" Minimum="0" Value="{Binding Opacity}" Style="{StaticResource DefaultSlider}"/>
</DockPanel>
</StackPanel>
</StackPanel>
</TabItem>
<TabItem Header="阴影" Height="34">
</TabItem>
</TabControl>
</ControlTemplate>
<ControlTemplate TargetType="Control" x:Key="ThemeTemplate">
<Grid>
</Grid>
</ControlTemplate>
<ControlTemplate TargetType="Control" x:Key="PictureTemplate">
<TabControl Style="{StaticResource UniformTabControlStyle}">
<TabItem Header="图片" Height="34">
<UniformGrid Columns="2" VerticalAlignment="Top">
<Fluent:Button Header="插入图片" VerticalAlignment="Top" Command="{Binding 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.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.LargeIcon>
<iconPacks:PackIconMaterial Kind="ImagePlus" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:SplitButton.LargeIcon>
<ListBox helper:EnumHelper.Enum="{x:Type dd:ClipMode}" SelectedItem="{Binding SelectedItem.ClipMode}" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Fluent:SplitButton>
<Fluent:Button Header="原始图" VerticalAlignment="Top" Command="{Binding ResetImageCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="ImageRemove" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
</Fluent:Button>
</UniformGrid>
</TabItem>
<TabItem Header="视频" Height="34">
<UniformGrid Columns="2" VerticalAlignment="Top">
<Fluent:Button Header="插入视频" VerticalAlignment="Top" Command="{Binding AddVideoCommand}">
<Fluent:Button.LargeIcon>
<iconPacks:PackIconMaterial Kind="Video" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
</Fluent:Button>
</UniformGrid>
</TabItem>
<TabItem Header="二维码" Height="34">
<UniformGrid Columns="2" VerticalAlignment="Top">
<Fluent:Button Header="插入二维码" VerticalAlignment="Top" Command="{Binding 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.LargeIcon>
<iconPacks:PackIconMaterial Kind="Barcode" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:Button.LargeIcon>
</Fluent:Button>
</UniformGrid>
</TabItem>
</TabControl>
</ControlTemplate>
<ControlTemplate TargetType="Control" x:Key="PropertyTemplate">
<controls:PropertiesView SelectedObject="{Binding SelectedItem}">
<controls:PropertiesView.Resources>
<Style x:Key="ActTypeStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid DataContext="{Binding Path=DataContext,RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}">
<Fluent:ComboBox Size="Small" IsEditable="False" Height="Auto" Template="{StaticResource ComboboxControlTemplate1}"
BorderThickness="0" BorderBrush="Transparent"
Text="{Binding ActType}" >
<ComboBoxItem Content="or"/>
<ComboBoxItem Content="and"/>
</Fluent:ComboBox>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="UserIdsStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid DataContext="{Binding Path=DataContext,RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}">
<controls:MultiSelectComboBox BorderThickness="0" DisplayMemberPath="text" SelectedValuePath="value"
SelectedValues="{Binding UserIds}"
ItemsSource="{x:Static flowchart:FlowchartService.Users}" ></controls:MultiSelectComboBox>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="RoleIdsStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid DataContext="{Binding Path=DataContext,RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}">
<controls:MultiSelectComboBox BorderThickness="0" DisplayMemberPath="text" SelectedValuePath="value"
SelectedValues="{Binding RoleIds}"
ItemsSource="{x:Static flowchart:FlowchartService.Roles}"></controls:MultiSelectComboBox>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</controls:PropertiesView.Resources>
</controls:PropertiesView>
</ControlTemplate>
</UserControl.Resources>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="1,0,0,0">
<ToggleButton IsChecked="{Binding ElementName=expanderRight,Path=IsExpanded}" Background="{DynamicResource WhiteBrush}" Style="{StaticResource ExpanderToggleButton}"/>
<ListBox x:Name="listBox" SelectedIndex="0" Padding="0,0,0,10" BorderThickness="0" Style="{StaticResource DefaultListBox}">
<iconPacks:PackIconMaterial Kind="FormatColorFill" Width="18" Height="18" Margin="8"/>
<iconPacks:PackIconMaterial Kind="ViewGridOutline" Width="18" Height="18" Margin="8" />
<iconPacks:PackIconMaterial Kind="Image" Width="18" Height="18" Margin="8"/>
<iconPacks:PackIconMaterial Kind="SettingsHelper" Width="18" Height="18" Margin="8"/>
</ListBox>
</StackPanel>
<dd:BorderResizeThumb Width="1" Margin="0,0,-3,0" ResizeElement="{Binding ElementName=control}" Cursor="SizeWE" VerticalAlignment="Stretch" HorizontalAlignment="Left" Visibility="{Binding ElementName=expanderRight,Path=IsExpanded,Converter={StaticResource BooleanToVisibilityConverter}}"/>
<Expander x:Name="expanderRight" Grid.Column="1" IsExpanded="True" ExpandDirection="Right" Style="{StaticResource DefaultAutoHideExpander}" Padding="0">
<Control x:Name="control" Width="200" MinWidth="100" MaxWidth="500">
<Control.Style>
<Style TargetType="Control">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedIndex,ElementName=listBox, Mode=OneWay}" Value="0">
<Setter Property="Template" Value="{StaticResource FillTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding SelectedIndex,ElementName=listBox, Mode=OneWay}" Value="1">
<Setter Property="Template" Value="{StaticResource ThemeTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding SelectedIndex,ElementName=listBox, Mode=OneWay}" Value="2">
<Setter Property="Template" Value="{StaticResource PictureTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding SelectedIndex,ElementName=listBox, Mode=OneWay}" Value="3">
<Setter Property="Template" Value="{StaticResource PropertyTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Control.Style>
</Control>
</Expander>
</Grid>
</UserControl>

View File

@@ -0,0 +1,15 @@
using System.Windows.Controls;
namespace AIStudio.Wpf.DiagramApp.Views
{
/// <summary>
/// PropertyControl.xaml 的交互逻辑
/// </summary>
public partial class PropertyControl : UserControl
{
public PropertyControl()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,362 @@
<UserControl x:Class="AIStudio.Wpf.DiagramApp.Views.ToolBoxControl"
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:views="clr-namespace:AIStudio.Wpf.DiagramApp.Views"
xmlns:viewmodels="clr-namespace:AIStudio.Wpf.DiagramApp.ViewModels"
xmlns:model="clr-namespace:AIStudio.Wpf.DiagramApp.Models"
xmlns:dd="https://astudio.github.io/diagram"
xmlns:conventer="clr-namespace:AIStudio.Wpf.DiagramHelper.Converters;assembly=AIStudio.Wpf.DiagramHelper"
xmlns:command="clr-namespace:AIStudio.Wpf.DiagramHelper.Commands;assembly=AIStudio.Wpf.DiagramHelper"
xmlns:svg="clr-namespace:Svg2XamlTestExtension;assembly=Svg2XamlTestExtension"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<ResourceDictionary>
<conventer:StringPathConverter x:Key="stringPathConverter"/>
<conventer:IntVisibilityConverter x:Key="IntVisibilityConverter"/>
<dd:EnumDescriptionConverter x:Key="EnumDescriptionConverter"/>
<command:CommandReference x:Key="DeleteItemCommandReference" Command="{Binding DeleteItemCommand}"/>
<DataTemplate DataType="{x:Type model:ImageToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Image IsHitTestVisible="True"
Stretch="Fill"
Margin="2"
Source="{Binding Icon, Converter={x:Static dd:ImageUrlConverter.Instance}}" />
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:MediaToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Image IsHitTestVisible="True"
Stretch="Fill"
Margin="2"
Source="{Binding Text, Converter={x:Static dd:ImageUrlConverter.Instance}}" />
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:TextToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Rectangle Fill="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}" Margin="2"/>
<TextBlock Text="{Binding Text}" FontSize="11" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:EllipseTextToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Ellipse Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Ellipse Fill="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}" Margin="2"/>
<TextBlock Text="{Binding Text}" FontSize="11" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:PathToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Path Style="{StaticResource PathItemStyle}" ToolTip="Document" Margin="2"/>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:SvgToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<svg:PackSvg Width="Auto" Height="Auto" Path="{Binding Icon}" Fill="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}"/>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:DesignerItemToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="删除" Command="{StaticResource DeleteItemCommandReference}" CommandParameter="{Binding .}"/>
</ContextMenu>
</Grid.ContextMenu>
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Viewbox Stretch="Uniform" DataContext="{Binding DesignerItemViewModel}">
<Grid Width="{Binding ItemWidth}" Height="{Binding ItemHeight}" IsHitTestVisible="False">
<ContentControl Content="{Binding .}" Margin="2"/>
<TextBox Text="{Binding Text}"
IsReadOnly="True"
TextWrapping="Wrap"
Background ="Transparent"
BorderThickness="0"
Margin="5"
Foreground="{Binding FontViewModel.FontColor,Converter={StaticResource ColorBrushConverter}}"
FontSize="{Binding FontViewModel.FontSize}"
FontFamily="{Binding FontViewModel.FontFamily}"
FontWeight="{Binding FontViewModel.FontWeight}"
FontStyle="{Binding FontViewModel.FontStyle}"
FontStretch="{Binding FontViewModel.FontStretch}"
TextDecorations="{Binding FontViewModel.TextDecorations}"
HorizontalContentAlignment="{Binding FontViewModel.HorizontalAlignment}"
VerticalContentAlignment="{Binding FontViewModel.VerticalAlignment}"
TextBlock.LineHeight="{Binding FontViewModel.LineHeight}"/>
</Grid>
</Viewbox>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:FlowchartToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Viewbox Stretch="Fill">
<Grid IsHitTestVisible="False">
<ContentControl Style="{StaticResource CustomFlowNodeStyle}" Margin="2"/>
<TextBlock Text="{Binding Text}" Margin="5" Foreground="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}" HorizontalAlignment="Left" />
</Grid>
</Viewbox>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type model:SFCToolBoxData}">
<Grid Width="{Binding Width}" Height="{Binding Height}" ToolTip="{Binding Kind,Converter={StaticResource EnumDescriptionConverter}}">
<Rectangle Name="Border"
StrokeThickness="1"
StrokeDashArray="2"
Fill="Transparent"
SnapsToDevicePixels="true"/>
<Grid IsHitTestVisible="False">
<ContentControl Style="{StaticResource CustomSFCNodeStyle}" Margin="2" />
</Grid>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Stroke" Value="Gray"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodels:ToolBoxCategory}">
<Grid Visibility="{Binding IsChecked,Converter={StaticResource boolToVisibilityConverter}}">
<Expander Header="{Binding Header}"
IsExpanded="{Binding IsExpanded}"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource Fluent.Ribbon.Brushes.LabelTextBrush}"
Style="{StaticResource DefaultAnimationExpander}">
<ItemsControl ItemsSource="{Binding ToolBoxItems}">
<ItemsControl.Template>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
Padding="{TemplateBinding Control.Padding}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
SnapsToDevicePixels="True">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl}}, Path=ActualWidth}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Control.Padding"
Value="10" />
<Setter Property="ContentControl.HorizontalContentAlignment"
Value="Stretch" />
<Setter Property="ContentControl.VerticalContentAlignment"
Value="Stretch" />
<Setter Property="ToolTip"
Value="{Binding ToolTip}" />
<Setter Property="dd:DragAndDropProps.EnabledForDrag"
Value="True" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Expander>
<Button Margin="5" ToolTip="移除" Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}" CommandParameter="{Binding .}" Width="16" Height="16" HorizontalAlignment="Right" VerticalAlignment="Top" Foreground="{DynamicResource BlackBrush}" Background="{DynamicResource WhiteBrush}" BorderBrush="Transparent">
<Path Stretch="Fill" Margin="2" Fill="Red" Data="M0.7,0 L5,4.3 L9.3,0 L10,0.7 L5.7,5 L10,9.3 L9.3,10 L5,5.7 L0.7,10 L0,9.3 L4.3,5 L0,0.7 z" ></Path>
</Button>
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodels:MineToolBoxCategory}">
<Grid Visibility="{Binding IsChecked,Converter={StaticResource boolToVisibilityConverter}}">
<Expander Header="{Binding Header}"
IsExpanded="{Binding IsExpanded}"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource Fluent.Ribbon.Brushes.LabelTextBrush}"
Style="{StaticResource DefaultAnimationExpander}">
<Grid>
<Border BorderThickness="1" CornerRadius="5" Margin="5" Padding="10" Visibility="{Binding ToolBoxItems.Count, Converter={StaticResource IntVisibilityConverter}, ConverterParameter='0'}">
<Border.BorderBrush>
<LinearGradientBrush SpreadMethod="Repeat" StartPoint="0,5" EndPoint="5,0" MappingMode="Absolute">
<LinearGradientBrush.GradientStops>
<GradientStop Color="{DynamicResource Fluent.Ribbon.Colors.AccentBaseColor}" Offset="0"/>
<GradientStop Color="{DynamicResource Fluent.Ribbon.Colors.AccentBaseColor}" Offset="0.2"/>
<GradientStop Color="Transparent" Offset="0.4"/>
<GradientStop Color="Transparent" Offset="0.6"/>
<GradientStop Color="{DynamicResource Fluent.Ribbon.Colors.AccentBaseColor}" Offset="0.8"/>
<GradientStop Color="{DynamicResource Fluent.Ribbon.Colors.AccentBaseColor}" Offset="1"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.BorderBrush>
<TextBlock Text="添加形状到我的符号" HorizontalAlignment="Center" Foreground="{DynamicResource GrayBrush2}"/>
</Border>
<ItemsControl ItemsSource="{Binding ToolBoxItems}">
<ItemsControl.Template>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
Padding="{TemplateBinding Control.Padding}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
SnapsToDevicePixels="True">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl}}, Path=ActualWidth}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Control.Padding"
Value="10" />
<Setter Property="ContentControl.HorizontalContentAlignment"
Value="Stretch" />
<Setter Property="ContentControl.VerticalContentAlignment"
Value="Stretch" />
<Setter Property="ToolTip"
Value="{Binding ToolTip}" />
<Setter Property="dd:DragAndDropProps.EnabledForDrag"
Value="True" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
</Expander>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top">
<Button Margin="0,5,2,5" ToolTip="导入到我的符号" Command="{Binding DataContext.ImportItemCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}" Width="16" Height="16" Foreground="{DynamicResource BlackBrush}" Background="{DynamicResource WhiteBrush}" BorderBrush="Transparent">
<Path Stretch="Fill" Margin="2" Fill="{DynamicResource GrayBrush2}" Data="M14,12L10,8V11H2V13H10V16M20,18V6C20,4.89 19.1,4 18,4H6A2,2 0 0,0 4,6V9H6V6H18V18H6V15H4V18A2,2 0 0,0 6,20H18A2,2 0 0,0 20,18Z" ></Path>
</Button>
<Button Margin="0,5,2,5" ToolTip="添加到我的符号" Command="{Binding DataContext.AddItemCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}" Width="16" Height="16" Foreground="{DynamicResource BlackBrush}" Background="{DynamicResource WhiteBrush}" BorderBrush="Transparent">
<Path Stretch="Fill" Margin="2" Fill="{DynamicResource GrayBrush2}" Data="M938.666667 426.666667h-341.333334V85.333333c0-46.933333-38.4-85.333333-85.333333-85.333333s-85.333333 38.4-85.333333 85.333333v341.333334H85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333333s38.4 85.333333 85.333333 85.333333h341.333334v341.333334c0 46.933333 38.4 85.333333 85.333333 85.333333s85.333333-38.4 85.333333-85.333333v-341.333334h341.333334c46.933333 0 85.333333-38.4 85.333333-85.333333s-38.4-85.333333-85.333333-85.333333z" ></Path>
</Button>
<Button Margin="0,5,5,5" ToolTip="移除" Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}" CommandParameter="{Binding .}" Width="16" Height="16" Foreground="{DynamicResource BlackBrush}" Background="{DynamicResource WhiteBrush}" BorderBrush="Transparent">
<Path Stretch="Fill" Margin="2" Fill="Red" Data="M0.7,0 L5,4.3 L9.3,0 L10,0.7 L5.7,5 L10,9.3 L9.3,10 L5,5.7 L0.7,10 L0,9.3 L4.3,5 L0,0.7 z" ></Path>
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Expander x:Name="expanderLeft" ExpandDirection="Left" IsExpanded="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=views:ToolBoxControl}}" Style="{StaticResource DefaultAutoHideExpander}" Margin="0,0,1,0">
<Expander.Header>
<DockPanel Height="26">
<ToggleButton DockPanel.Dock="Right" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=views:ToolBoxControl}}" Background="{DynamicResource Fluent.Ribbon.Brushes.AccentBaseColorBrush}" Style="{StaticResource DefaultToggleButton}">
<Path Fill="Black" Stretch="Fill" Width="16" Height="16" Margin="10,3" Data="M18.41,7.41L17,6L11,12L17,18L18.41,16.59L13.83,12L18.41,7.41M12.41,7.41L11,6L5,12L11,18L12.41,16.59L7.83,12L12.41,7.41Z"/>
</ToggleButton>
<TextBlock Text="符号库" DockPanel.Dock="Left" VerticalAlignment="Center"/>
</DockPanel>
</Expander.Header>
<Border>
<Grid x:Name="grid" Width="225" MinWidth="100" MaxWidth="500">
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding ToolBoxCategory}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="IsCheckable" Value="True" />
<Setter Property="IsChecked" Value="{Binding IsChecked}"/>
</Style>
</ContextMenu.ItemContainerStyle>
<ContextMenu.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Grid.ContextMenu>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ItemsControl x:Name="listbox" ItemsSource="{Binding ToolBoxCategory}" Padding="0,0,0,0" BorderThickness="0">
</ItemsControl>
</ScrollViewer>
</Grid>
</Border>
</Expander>
<dd:BorderResizeThumb Width="1" Margin="-3,0,0,0" ResizeElement="{Binding ElementName=grid}" Cursor="SizeWE" HorizontalAlignment="Right" VerticalAlignment="Stretch" Visibility="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=views:ToolBoxControl},Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,38 @@
using System.Windows;
using System.Windows.Controls;
namespace AIStudio.Wpf.DiagramApp.Views
{
/// <summary>
/// ToolBoxControl.xaml 的交互逻辑
/// </summary>
public partial class ToolBoxControl : UserControl
{
#region IsExpanded
/// <summary>
/// BindingWidthAndHeight Dependency Property
/// </summary>
public static readonly DependencyProperty IsExpandedProperty =
DependencyProperty.Register("IsExpanded", typeof(bool), typeof(ToolBoxControl),
new FrameworkPropertyMetadata(true));
/// <summary>
/// Gets or sets the BindingWidthAndHeight property. This dependency property
/// indicates if the ResizableItemsControl is in Composing mode.
/// </summary>
public bool IsExpanded
{
get { return (bool)GetValue(IsExpandedProperty); }
set { SetValue(IsExpandedProperty, value); }
}
#endregion
public ToolBoxControl()
{
InitializeComponent();
}
}
}