OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / WpfDisplay / Views / NodeMap.xaml

87 lines · xaml ref:
<UserControl x:Class="WpfDisplay.Views.NodeMap"
             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:WpfDisplay.Views"
             xmlns:vm="clr-namespace:WpfDisplay.ViewModels"
             xmlns:xc="http://schemas.xceed.com/wpf/xaml/toolkit"
             mc:Ignorable="d" 
             x:Name="nodeMap"
             d:DesignHeight="450" d:DesignWidth="800"
             d:DataContext="{d:DesignInstance Type=vm:IFSViewModel}">
    <UserControl.Resources>
        <SolidColorBrush x:Key="bgBrush" Color="Gray"/>
        <!--<VisualBrush x:Key="bgBrush" TileMode="Tile" 
                     Viewport="0,0,25,25" ViewportUnits="Absolute" Viewbox="0,0,25,25" ViewboxUnits="Absolute">
            <VisualBrush.Visual>
                <Grid Background="Gray">
                    <Path Data="M 25 25 L 25 0" Stroke="DarkSlateGray" />
                    <Path Data="M 0 25 L 25 25" Stroke="DarkSlateGray" />
                </Grid>
            </VisualBrush.Visual>
        </VisualBrush>-->
    </UserControl.Resources>
    <Grid>
        <xc:Zoombox
                x:Name="ZoomBorder" 
                IsAnimated="True"
                AnimationDuration="0:0:0.05"
                KeepContentInBounds="True" 
                DragModifiers="None"
                RelativeZoomModifiers="None"
                Cursor="Arrow"
                ZoomOnPreview="False"
                Position="0,0"
                Scale="1"
                >
            <Grid x:Name="wrapperGrid" ClipToBounds="False" Background="{StaticResource bgBrush}">
                <!--Temporary arrow which indicates a new connection being dragged-->
                <Canvas>
                    <local:ConnectionArrow x:Name="dragArrow"
                        StartPoint="{Binding ConnectingIterator.Position}"
                        Visibility="{Binding ConnectingIterator, Converter={StaticResource nullVisibilityConverter}}"/>
                </Canvas>
                
                <!--Map Nodes and Arrows to Iterators and weights-->
                <ItemsControl ItemsSource="{Binding NodeMapElements}" x:Name="itemsControl">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Canvas x:Name="itemsPanel"
                                    Width="{Binding ActualWidth, ElementName=ZoomBorder, Mode=OneWay}" 
                                    Height="{Binding ActualHeight, ElementName=ZoomBorder, Mode=OneWay}"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemContainerStyle>
                        <Style>
                            <Setter Property="Canvas.ZIndex" Value="{Binding ForegroundZIndex}"/>
                        </Style>
                    </ItemsControl.ItemContainerStyle>
                    <ItemsControl.Resources>
                        <DataTemplate DataType="{x:Type vm:IteratorViewModel}">
                            <local:Node
                                Position="{Binding Position, Mode=TwoWay}"
                                ParentCanvas="{Binding ElementName=itemsPanel}"
                                DataContext="{Binding}"
                                SelectCommand="{Binding DataContext.SelectIteratorCommand, ElementName=nodeMap}">
                            </local:Node>
                        </DataTemplate>
                        <DataTemplate DataType="{x:Type vm:ConnectionViewModel}">
                            <local:ConnectionArrow
                                StartPoint="{Binding StartPoint}"
                                EndPoint="{Binding EndPoint}"
                                ParentNodeMap="{Binding ElementName=nodeMap}"
                                DataContext="{Binding}"
                                SelectCommand="{Binding DataContext.SelectConnectionCommand, ElementName=nodeMap}"/>
                        </DataTemplate>
                    </ItemsControl.Resources>
                </ItemsControl>
            </Grid>
        </xc:Zoombox>
        <!--<Button Command="{Binding AutoLayoutNodesCommand}"
            Style="{DynamicResource MaterialDesignFloatingActionButton}" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10,10,10,10">
            Layout
        </Button>-->
    </Grid>
</UserControl>