ViewModel中写具体关键的几段代码:
- var editor = sender as NodifyEditor;
- Point p = e.GetPosition(editor);
- //放大缩小比例
- double scale = editor.ViewportZoom;
- //经过放大缩小、平移后获得坐标点位置
- p = new Point(Math.Round((p.X - editor.ViewportTransform.Value.OffsetX) / scale,0), Math.Round((p.Y - editor.ViewportTransform.Value.OffsetY) / scale,0));
复制代码 详细代码如下
CustomInterfaceView.xaml
- <UserControl x:Class="Ueyes.Intergration.AgingEditor.View.CustomInterfaceView"
- 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:Ueyes.Intergration.AgingEditor"
- xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
- xmlns:nodify="https://miroiu.github.io/nodify"
- xmlns:shared="clr-namespace:Ueyes.Intergration.AgingEditor.Share;assembly=Ueyes.Intergration.AgingEditor.Share"
- xmlns:h="http://schemas.microsoft.com/xaml/behaviors"
- mc:Ignorable="d" Name="custom"
- d:DesignHeight="800" d:DesignWidth="1000">
- <UserControl.Resources>
- <shared:TargetTypeToVisibilityConverter x:Key="TargetTypeToVisibilityConverter"/>
- <shared:BindingProxy x:Key="EditorProxy" DataContext="{Binding}" />
- <shared:BindingProxy x:Key="BlackboardProxy" DataContext="{Binding SelectedState.Action}" />
- <DataTemplate x:Key="ToolBoxStyle">
- <Grid Margin="2" Background="Transparent">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="30"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <iconPacks:PackIconMaterial x:Name="icon" Kind="Ellipse" BorderThickness="1" VerticalAlignment="Stretch" Width="24" HorizontalAlignment="Stretch"/>
- <TextBlock x:Name="txt" Grid.Column="1" Text="{Binding TypeName}" Margin="4"/>
- </Grid>
- <DataTemplate.Triggers>
- <DataTrigger Binding="{Binding TypeName}" Value="Button">
- <Setter Property="Kind" TargetName="icon" Value="GestureTapButton"/>
- <Setter Property="Text" TargetName="txt" Value="{Binding Header}"/>
- </DataTrigger>
- <DataTrigger Binding="{Binding TypeName}" Value="TextBox">
- <Setter Property="Kind" TargetName="icon" Value="Numeric8Box"/>
- <Setter Property="Text" TargetName="txt" Value="{Binding Header}"/>
- </DataTrigger>
- <DataTrigger Binding="{Binding TypeName}" Value="TextBlock">
- <Setter Property="Kind" TargetName="icon" Value="FormatText"/>
- <Setter Property="Text" TargetName="txt" Value="{Binding Header}"/>
- </DataTrigger>
- </DataTemplate.Triggers>
- </DataTemplate>
- <DataTemplate x:Key="ButtonTemplate">
- <Button Command="{Binding DataContext.ClickCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" CommandParameter="{Binding .}">
- <Button.Content>
- <shared:EditableTextBlock IsEditable="{Binding IsEditable}"
- IsEditing="{Binding IsRenaming}" Text="{Binding Name}" />
- </Button.Content>
- </Button>
- </DataTemplate>
- <DataTemplate x:Key="TextBlockTemplate">
- <shared:EditableTextBlock IsEditable="{Binding IsEditable}" Foreground="Black" MaxLength="30"
- IsEditing="{Binding IsRenaming}" Text="{Binding Name}" />
- </DataTemplate>
- <DataTemplate x:Key="TextBoxTemplate">
- <TextBox Text="{Binding Name}" IsEnabled="{Binding IsEditable}" MinHeight="25" MaxLength="30"/>
- </DataTemplate>
- </UserControl.Resources>
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto" />
- <ColumnDefinition />
- <ColumnDefinition Width="Auto"/>
- <ColumnDefinition Width="Auto"/>
- </Grid.ColumnDefinitions>
- <nodify:NodifyEditor x:Name="Editor" Grid.Column="1" Background="White"
- ItemsSource="{Binding States}" AllowDrop="True"
- SelectedItem="{Binding SelectedState}" DisableZooming="False" DisablePanning="False"
- SelectedItems="{Binding SelectedStates}">
- <h:Interaction.Triggers>
- <h:EventTrigger EventName="Drop">
- <h:CallMethodAction TargetObject="{Binding}"
- MethodName="nodify_Drop"/>
-
- </h:EventTrigger>
- </h:Interaction.Triggers>
-
- <nodify:NodifyEditor.ItemTemplate>
- <DataTemplate DataType="{x:Type local:StateViewModel}">
- <nodify:StateNode Anchor="{Binding Anchor, Mode=OneWayToSource}" Padding="10 12"
- Content="{Binding}" IsConnected="False" ToolTip="{Binding Location}">
- <nodify:StateNode.ContentTemplate>
- <DataTemplate DataType="{x:Type local:StateViewModel}">
- <ContentControl Content="{Binding}" >
- <ContentControl.Style>
- <Style TargetType="{x:Type ContentControl}">
- <Style.Triggers>
- <DataTrigger Binding="{Binding TargetType}" Value="Button">
- <Setter Property="ContentTemplate" Value="{StaticResource ButtonTemplate}" />
- </DataTrigger>
- <DataTrigger Binding="{Binding TargetType}" Value="TextBlock">
- <Setter Property="ContentTemplate" Value="{StaticResource TextBlockTemplate}" />
- </DataTrigger>
- <DataTrigger Binding="{Binding TargetType}" Value="TextBox">
- <Setter Property="ContentTemplate" Value="{StaticResource TextBoxTemplate}" />
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </ContentControl.Style>
- </ContentControl>
- </DataTemplate>
- </nodify:StateNode.ContentTemplate>
- <nodify:StateNode.Style>
- <Style BasedOn="{StaticResource {x:Type nodify:StateNode}}" TargetType="{x:Type nodify:StateNode}">
- <Setter Property="BorderThickness" Value="0"/>
- <Style.Triggers>
- <DataTrigger Binding="{Binding TargetType}" Value="Button">
- <Setter Property="Background" Value="White" />
- </DataTrigger>
- <DataTrigger Binding="{Binding TargetType}" Value="TextBlock">
- <Setter Property="Foreground" Value="Black"/>
- <Setter Property="Background" Value="White" />
- </DataTrigger>
- <DataTrigger Binding="{Binding TargetType}" Value="TextBox">
- <Setter Property="Background" Value="White" />
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </nodify:StateNode.Style>
- </nodify:StateNode>
- </DataTemplate>
- </nodify:NodifyEditor.ItemTemplate>
- <nodify:NodifyEditor.ItemContainerStyle>
- <Style BasedOn="{StaticResource {x:Type nodify:ItemContainer}}" TargetType="{x:Type nodify:ItemContainer}">
- <Setter Property="BorderBrush" Value="Transparent" />
- <Setter Property="Location" Value="{Binding Location}" />
- <Setter Property="ActualSize" Value="{Binding Size, Mode=OneWayToSource}" />
- <Setter Property="ContextMenu">
- <Setter.Value>
- <ContextMenu DataContext="{Binding DataContext, Source={StaticResource EditorProxy}}">
- <MenuItem
- Command="{Binding DeleteCommand}"
- Header="_Delete"
- Icon="{StaticResource DeleteIcon}"
- InputGestureText="Delete"/>
- <MenuItem
- Command="{Binding CopyCommand}"
- Header="_Copy"
- Icon="{StaticResource CopyIcon}"
- InputGestureText="Ctrl+D" />
- <MenuItem
- Command="{Binding RenameCommand}"
- Header="_Rename"
- Icon="{StaticResource RenameIcon}" />
- <MenuItem
- Command="{Binding EditableCommand}"
- Header="_IsEditable"
- Icon="{StaticResource EditIcon}" />
- <!--<MenuItem
- Command="{Binding MoveCommand}"
- Header="_IsMove"
- Icon="{StaticResource EditIcon}" />-->
- <MenuItem Header="_Alignment" Icon="{StaticResource AlignTopIcon}">
- <MenuItem
- Command="{x:Static nodify:EditorCommands.Align}"
- CommandParameter="Top"
- Header="_Top"
- Icon="{StaticResource AlignTopIcon}" />
- <MenuItem
- Command="{x:Static nodify:EditorCommands.Align}"
- CommandParameter="Left"
- Header="_Left"
- Icon="{StaticResource AlignLeftIcon}" />
- <MenuItem
- Command="{x:Static nodify:EditorCommands.Align}"
- CommandParameter="Bottom"
- Header="_Bottom"
- Icon="{StaticResource AlignBottomIcon}" />
- <MenuItem
- Command="{x:Static nodify:EditorCommands.Align}"
- CommandParameter="Right"
- Header="_Right"
- Icon="{StaticResource AlignRightIcon}" />
- <MenuItem
- Command="{x:Static nodify:EditorCommands.Align}"
- CommandParameter="Middle"
- Header="_Middle"
- Icon="{StaticResource AlignMiddleIcon}" />
- <MenuItem
- Command="{x:Static nodify:EditorCommands.Align}"
- CommandParameter="Center"
- Header="_Center"
- Icon="{StaticResource AlignCenterIcon}" />
- </MenuItem>
- </ContextMenu>
- </Setter.Value>
- </Setter>
- </Style>
- </nodify:NodifyEditor.ItemContainerStyle>
- <nodify:NodifyEditor.ContextMenu>
- <ContextMenu DataContext="{Binding DataContext, Source={StaticResource EditorProxy}}">
- <MenuItem
- Command="{Binding AddButtonCommand}"
- CommandParameter="{Binding PlacementTarget.MouseLocation, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
- Header="_Add Button"
- Icon="{StaticResource AddStateIcon}"/>
- <MenuItem
- Command="{Binding AddTextBlockCommand}"
- CommandParameter="{Binding PlacementTarget.MouseLocation, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
- Header="_Add TextBlock"
- Icon="{StaticResource AddStateIcon}"/>
- <MenuItem
- Command="{Binding AddTextBoxCommand}"
- CommandParameter="{Binding PlacementTarget.MouseLocation, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
- Header="_Add TextBox"
- Icon="{StaticResource AddStateIcon}"/>
- <MenuItem
- Command="{Binding DeleteCommand}"
- Header="_Delete"
- Icon="{StaticResource DeleteIcon}"
- InputGestureText="Delete" />
- <Separator Background="{DynamicResource BorderBrush}" />
- <MenuItem
- Command="{x:Static nodify:EditorCommands.SelectAll}"
- Header="_Select All"
- Icon="{StaticResource SelectAllIcon}"
- InputGestureText="Ctrl+A" />
- </ContextMenu>
- </nodify:NodifyEditor.ContextMenu>
- <!--快捷键添加删除新模块操作-->
- <nodify:NodifyEditor.InputBindings>
- <KeyBinding Key="Delete" Command="{Binding DeleteCommand}" />
- <!--<KeyBinding
- Key="A"
- Command="{Binding AddStateCommand}"
- CommandParameter="{Binding MouseLocation, RelativeSource={RelativeSource AncestorType={x:Type nodify:NodifyEditor}}}"
- Modifiers="Shift" />-->
- <KeyBinding Command="{Binding CopyCommand}"
- Key="D" Modifiers="Ctrl"/>
- <KeyBinding Command="{x:Static nodify:EditorCommands.SelectAll}"
- Key="A" Modifiers="Ctrl"/>
- </nodify:NodifyEditor.InputBindings>
- </nodify:NodifyEditor>
- <Expander
- Padding="0,1,4,3"
- HorizontalAlignment="Left"
- HorizontalContentAlignment="Left"
- VerticalContentAlignment="Center"
- Background="{DynamicResource PanelBackgroundBrush}"
- ExpandDirection="Left"
- IsExpanded="True"
- Visibility="Visible">
- <Expander.Style>
- <Style BasedOn="{StaticResource {x:Type Expander}}" TargetType="{x:Type Expander}">
- <Setter Property="Tag" Value="{StaticResource ExpandRightIcon}" />
- <Style.Triggers>
- <Trigger Property="IsExpanded" Value="True">
- <Setter Property="Tag" Value="{StaticResource ExpandLeftIcon}" />
- </Trigger>
- </Style.Triggers>
- </Style>
- </Expander.Style>
- <Border
- Width="450"
- Padding="10"
- HorizontalAlignment="Stretch"
- BorderBrush="{DynamicResource BackgroundBrush}"
- BorderThickness="1">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="3*"/>
- <RowDefinition Height="6*" />
- <RowDefinition Height="1*" />
- </Grid.RowDefinitions>
- <!-- TRANSITIONS -->
- <Grid
- Grid.Row="0"
- Margin="0,10,0,10"
- Visibility="{Binding SelectedState, Converter={shared:BooleanToVisibilityConverter Negate=True}}">
- <Grid VerticalAlignment="Top">
- <ListBox x:Name="CtlList" ItemsSource="{Binding ThumbList}" Background="Transparent"
- ItemTemplate="{StaticResource ToolBoxStyle}" SelectedItem="{Binding ThumbSelectedItem}" BorderThickness="0">
- <h:Interaction.Triggers>
- <h:EventTrigger EventName="PreviewMouseMove">
- <h:CallMethodAction MethodName="CtlList_PreviewMouseMove"
- TargetObject="{Binding ElementName=custom,Path=DataContext}"/>
- </h:EventTrigger>
- </h:Interaction.Triggers>
- </ListBox>
- <!--<ItemsControl ItemsSource="{Binding ThumbList}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <Border Margin="5,3" Tag="{Binding TypeName}">
- <StackPanel Orientation="Horizontal">
- <iconPacks:PackIconMaterial x:Name="icon" Kind="GestureTapButton" BorderThickness="1"
- Width="30" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
- <TextBlock x:Name="txt" Grid.Column="1" Text="{Binding Header}" Margin="4"/>
- </StackPanel>
- <h:Interaction.Triggers>
- <h:EventTrigger EventName="MouseLeftButtonDown">
- <h:CallMethodAction MethodName="Border_MouseLeftButtonDown"
- TargetObject="{Binding ElementName=custom,Path=DataContext}"/>
- </h:EventTrigger>
- </h:Interaction.Triggers>
- </Border>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>-->
- </Grid>
- </Grid>
- <!-- STATES -->
- <Grid Grid.Row="0" Grid.RowSpan="2" Margin="0,10,0,10" Visibility="{Binding SelectedState, Converter={shared:BooleanToVisibilityConverter}}">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition />
- </Grid.RowDefinitions>
- <!-- STATE NAME -->
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*" />
- <ColumnDefinition Width="Auto" />
- </Grid.ColumnDefinitions>
- <shared:EditableTextBlock
- FontSize="16"
- FontWeight="Bold"
- Foreground="{DynamicResource ForegroundBrush}"
- IsEditable="{Binding SelectedState.IsEditable}"
- IsEditing="{Binding IsChecked, ElementName=EditStateName}"
- MaxLength="20"
- Text="{Binding SelectedState.Name}" />
- <CheckBox
- x:Name="EditStateName"
- Grid.Column="1"
- Content="{StaticResource EditIcon}"
- Style="{StaticResource IconCheckBox}"
- Visibility="{Binding SelectedState.IsEditable, Converter={shared:BooleanToVisibilityConverter}}" />
- </Grid>
- <Separator
- Grid.Row="1"
- Width="Auto"
- Height="2"
- Margin="0,2,0,10"/>
- <ScrollViewer
- Grid.Row="2"
- VerticalScrollBarVisibility="Auto"
- Visibility="{Binding SelectedState.Action, Converter={shared:BooleanToVisibilityConverter}}">
- <Grid IsSharedSizeScope="True">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto" />
- <ColumnDefinition />
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition />
- </Grid.RowDefinitions>
- <!-- ACTION -->
- <TextBlock
- Margin="0,0,10,0"
- VerticalAlignment="Center"
- Text="操作" />
- <ComboBox
- Grid.Column="1"
- DisplayMemberPath="Name"
- IsEnabled="{Binding SelectedState.IsEditable}"
- ItemsSource="{Binding Blackboard.Actions}"
- SelectedItem="{Binding SelectedState.ActionReference}"
- />
- <!-- INPUT -->
- <Expander
- Grid.Row="1"
- Grid.ColumnSpan="2"
- Margin="0,5,0,0"
- Padding="0,5,0,0"
- BorderBrush="{DynamicResource BackgroundBrush}"
- BorderThickness="0,0,0,1"
- FontWeight="Bold"
- Header="Input"
- IsExpanded="True"
- Visibility="{Binding SelectedState.Action.Input.Count, Converter={shared:BooleanToVisibilityConverter}}">
- <Expander.Style>
- <Style BasedOn="{StaticResource {x:Type Expander}}" TargetType="{x:Type Expander}">
- <Setter Property="Tag" Value="{StaticResource ExpandRightIcon}" />
- <Style.Triggers>
- <Trigger Property="IsExpanded" Value="True">
- <Setter Property="Tag" Value="{StaticResource ExpandDownIcon}" />
- </Trigger>
- </Style.Triggers>
- </Style>
- </Expander.Style>
- <ItemsControl FontWeight="Normal" ItemsSource="{Binding SelectedState.Action.Input}">
- <ItemsControl.ItemTemplate>
- <DataTemplate DataType="{x:Type local:BlackboardKeyViewModel}">
- <local:BlackBoardKeyEditorView Margin="0,0,0,2">
- <local:BlackBoardKeyEditorView.DataContext>
- <MultiBinding Converter="{local:BlackboardKeyEditorConverter CanChangeInputType=True}">
- <Binding Path="DataContext.Keys" Source="{StaticResource BlackboardProxy}" />
- <Binding BindsDirectlyToSource="True" />
- </MultiBinding>
- </local:BlackBoardKeyEditorView.DataContext>
- </local:BlackBoardKeyEditorView>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- </Expander>
- <!-- OUTPUT -->
- <Expander
- Grid.Row="2"
- Grid.ColumnSpan="2"
- Margin="0,5,0,0"
- Padding="0,5,0,0"
- BorderBrush="{DynamicResource BackgroundBrush}"
- BorderThickness="0,0,0,1"
- FontWeight="Bold"
- Header="Output"
- IsExpanded="True"
- Visibility="{Binding SelectedState.Action.Output.Count, Converter={shared:BooleanToVisibilityConverter}}">
- <Expander.Style>
- <Style BasedOn="{StaticResource {x:Type Expander}}" TargetType="{x:Type Expander}">
- <Setter Property="Tag" Value="{StaticResource ExpandRightIcon}" />
- <Style.Triggers>
- <Trigger Property="IsExpanded" Value="True">
- <Setter Property="Tag" Value="{StaticResource ExpandDownIcon}" />
- </Trigger>
- </Style.Triggers>
- </Style>
- </Expander.Style>
- <ItemsControl FontWeight="Normal" ItemsSource="{Binding SelectedState.Action.Output}">
- <ItemsControl.ItemTemplate>
- <DataTemplate DataType="{x:Type local:BlackboardKeyViewModel}">
- <local:BlackBoardKeyEditorView Margin="0,0,0,2">
- <local:BlackBoardKeyEditorView.DataContext>
- <MultiBinding Converter="{local:BlackboardKeyEditorConverter CanChangeInputType=False}">
- <Binding Path="DataContext.Keys" Source="{StaticResource BlackboardProxy}" />
- <Binding BindsDirectlyToSource="True" />
- </MultiBinding>
- </local:BlackBoardKeyEditorView.DataContext>
- </local:BlackBoardKeyEditorView>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- </Expander>
- <Grid Grid.Row="3" Grid.ColumnSpan="2" Margin="0 50 0 0" IsSharedSizeScope="True">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition />
- </Grid.RowDefinitions>
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*" />
- <ColumnDefinition Width="Auto" />
- </Grid.ColumnDefinitions>
- <shared:EditableTextBlock
- FontSize="16"
- FontWeight="Bold"
- Foreground="{DynamicResource ForegroundBrush}"
- IsEditing="{Binding IsChecked, ElementName=EditName}"
- MaxLength="20"
- Text="{Binding Name}" />
- <StackPanel Grid.Column="1" Orientation="Horizontal">
- <CheckBox
- x:Name="EditName"
- Content="{StaticResource EditIcon}"
- Style="{StaticResource IconCheckBox}"
- ToolTip="修改参数名称" />
- <Button
- Command="{Binding SelectedState.Action.AddKeyCommand}"
- Content="{StaticResource AddKeyIcon}"
- Style="{StaticResource IconButton}"
- ToolTip="添加新参数" />
- </StackPanel>
- </Grid>
- <Separator
- Grid.Row="1"
- Width="Auto"
- Height="2"
- Margin="0,2,0,10" />
- <ScrollViewer
- Grid.Row="2"
- HorizontalScrollBarVisibility="Auto"
- VerticalScrollBarVisibility="Auto">
- <ItemsControl ItemsSource="{Binding SelectedState.Action.ConfigParameter}">
- <ItemsControl.ItemTemplate>
- <DataTemplate DataType="{x:Type local:BlackboardKeyViewModel}">
- <Grid Margin="0,0,0,2">
- <Grid.ColumnDefinitions>
- <ColumnDefinition />
- <ColumnDefinition SharedSizeGroup="Actions" />
- </Grid.ColumnDefinitions>
- <local:BlackBoardKeyEditorView>
- <local:BlackBoardKeyEditorView.DataContext>
- <MultiBinding Converter="{local:BlackboardKeyEditorConverter CanChangeInputType=False}">
- <Binding Path="DataContext.ConfigParameter" Source="{StaticResource BlackboardProxy}" />
- <Binding BindsDirectlyToSource="True" />
- </MultiBinding>
- </local:BlackBoardKeyEditorView.DataContext>
- </local:BlackBoardKeyEditorView>
- <StackPanel Grid.Column="3" Orientation="Horizontal">
- <CheckBox
- x:Name="EditKeyName"
- Content="{StaticResource EditIcon}"
- Style="{StaticResource IconCheckBox}"
- ToolTip="修改参数名称" />
- <Button
- Command="{Binding DataContext.SelectedState.Action.RemoveKeyCommand, Source={StaticResource EditorProxy}}"
- CommandParameter="{Binding}"
- Content="{StaticResource RemoveKeyIcon}"
- Style="{StaticResource IconButton}" />
- </StackPanel>
- </Grid>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- </ScrollViewer>
- </Grid>
- </Grid>
- </ScrollViewer>
- <ScrollViewer
- Grid.Row="2"
- VerticalScrollBarVisibility="Auto"
- Visibility="{Binding SelectedState.TargetType, Converter={StaticResource TargetTypeToVisibilityConverter}}">
- <Grid IsSharedSizeScope="True" VerticalAlignment="Top">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <TextBlock Grid.Column="0" Text="编号" Margin="0,5,10,0"/>
- <TextBox Grid.Column="1" Height="25" Text="{Binding SelectedState.Code}" IsEnabled="False"/>
- </Grid>
- </ScrollViewer>
- </Grid>
- <!-- Export/Import -->
- <Grid Grid.Row="2">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition />
- </Grid.RowDefinitions>
- <!-- NAME -->
- <TextBlock
- FontSize="16"
- FontWeight="Bold"
- Foreground="{DynamicResource ForegroundBrush}"
- Text="方案导入/导出" />
- <Separator
- Grid.Row="1"
- Width="Auto"
- Height="2"
- Margin="0,2,0,5" />
- <Border Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Top"
- Background="{DynamicResource PanelBackgroundBrush}"
- BorderThickness="0,0,0,1"
- CornerRadius="2"
- Height="40">
- <StackPanel Orientation="Horizontal" Height="40">
- <Button Margin="10,0,10,0" Command="{Binding SaveCommand}"
- Content="{StaticResource SaveIcon}"
- Style="{StaticResource IconButton}"
- ToolTip="Save" Cursor="Hand" Height="40"/>
- <Button Margin="10,0,10,0" Command="{Binding ExportSchemeCommand}"
- Content="{StaticResource ExportIcon}"
- Style="{StaticResource IconButton}"
- ToolTip="Export" Cursor="Hand" Height="40"/>
- <Button Margin="10,0,10,0" Command="{Binding ImportSchemeCommand}"
- Content="{StaticResource ImportIcon}"
- Style="{StaticResource IconButton}"
- ToolTip="Import" Cursor="Hand" Height="40"/>
- </StackPanel>
- </Border>
- </Grid>
- </Grid>
- </Border>
- </Expander>
- </Grid>
- </UserControl>
复制代码 精炼重要点为
- <h:Interaction.Triggers>
- <h:EventTrigger EventName="Drop">
- <h:CallMethodAction TargetObject="{Binding}"
- MethodName="nodify_Drop"/>
- </h:EventTrigger>
- </h:Interaction.Triggers>
- <ListBox x:Name="CtlList" ItemsSource="{Binding ThumbList}" Background="Transparent"
- ItemTemplate="{StaticResource ToolBoxStyle}" SelectedItem="{Binding ThumbSelectedItem}" BorderThickness="0">
- <h:Interaction.Triggers>
- <h:EventTrigger EventName="PreviewMouseMove">
- <h:CallMethodAction MethodName="CtlList_PreviewMouseMove"
- TargetObject="{Binding ElementName=custom,Path=DataContext}"/>
- </h:EventTrigger>
- </h:Interaction.Triggers>
- </ListBox>
复制代码 其中Nodify的属性可参考此链接查察
第八节:Nodify 编辑器属性-CSDN博客
内里有编辑器的一些简介

CustomInterfaceViewModel.cs
- //可通过拖拽复制控件
- public void CtlList_PreviewMouseMove(object sender, MouseEventArgs e)
- {
- if (ThumbSelectedItem != null && e.LeftButton == MouseButtonState.Pressed)
- {
- DragDrop.DoDragDrop((DependencyObject)sender, ThumbSelectedItem, DragDropEffects.Copy);
- }
- }
- //nodify 放大缩小、平移后鼠标放在哪个位置 控件就显示在哪个位置
- //最重要的就是方法内前四句代码
- //p = new Point(Math.Round((p.X - editor.ViewportTransform.Value.OffsetX) / scale,0), Math.Round((p.Y - editor.ViewportTransform.Value.OffsetY) / scale,0));
- public void nodify_Drop(object sender, DragEventArgs e)
- {
- var editor = sender as NodifyEditor;
- Point p = e.GetPosition(editor);
- double scale = editor.ViewportZoom;
- p = new Point(Math.Round((p.X - editor.ViewportTransform.Value.OffsetX) / scale,0), Math.Round((p.Y - editor.ViewportTransform.Value.OffsetY) / scale,0));
- if (ThumbSelectedItem.TypeName == "Button")
- {
- States.Add(new CustomViewModel()
- {
- Name = "New Button",
- IsRenaming = true,
- Location = p,
- ActionReference = Blackboard.Actions.Count > 0 ? Blackboard.Actions[0] : null,
- TargetType = ThumbSelectedItem.TypeName
- });
- }
- else if (ThumbSelectedItem.TypeName == "TextBox")
- {
- States.Add(new CustomViewModel
- {
- Code = GenerateUniqueRandomCode(1, 100),
- Name = "New TextBox",
- IsRenaming = true,
- Location = p,
- TargetType = "TextBox"
- });
- }
- else
- {
- States.Add(new CustomViewModel
- {
- Name = "New TextBlock",
- IsRenaming = true,
- Location = p,
- TargetType = "TextBlock"
- });
- }
- e.Handled = true;
- }
复制代码 示例图
Nodify添加拖拽事件,经过放大缩小、平移后获得控件坐标点
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |