VintaSoft Imaging .NET SDK 15.1: Documentation for .NET developer
In This Topic
    How to add separators in WPF thumbnail viewer?
    In This Topic
    Here is C# code that shows how to add separators between thumbnails in WpfThumbnailViewer:
    ...
    thumbnailViewer.SizeChanged += new SizeChangedEventHandler(thumbnailViewer_SizeChanged);
    AddSeparator(thumbnailViewer, 1);
    AddSeparator(thumbnailViewer, 3);
    ...
    
    
    /// <summary>
    /// Handles the SizeChanged event of the WpfThumbnailViewer control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="SizeChangedEventArgs"/> instance containing the event data.</param>
    private void thumbnailViewer_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        UpdateSeparatorPositions((WpfThumbnailViewer)sender);
    }
    
    /// <summary>
    /// Adds the separator to the specified thumbnail viewer.
    /// </summary>
    /// <param name="thumbnailViewer">The thumbnail viewer.</param>
    /// <param name="index">The image index.</param>
    private void AddSeparator(WpfThumbnailViewer thumbnailViewer, int index)
    {
        Grid thumbnailViewerGrid = (Grid)thumbnailViewer.Content;
        Canvas thumbnailViewerCanvas = (Canvas)thumbnailViewerGrid.Children[1];
    
        Size thumbnailSize = thumbnailViewer.ThumbnailSize;
    
        System.Windows.Shapes.Rectangle separator = new System.Windows.Shapes.Rectangle();
        separator.Tag = index;
        separator.Width = 2;
        separator.Height = thumbnailSize.Width;
        separator.Fill = Brushes.Red;
    
        thumbnailViewerCanvas.Children.Add(separator);
    
        separator.Visibility = Visibility.Visible;
    
        UpdateSeparatorPositions(thumbnailViewer);
    }
    
    /// <summary>
    /// Updates the separator positions.
    /// </summary>
    /// <param name="thumbnailViewer">The thumbnail viewer.</param>
    private void UpdateSeparatorPositions(WpfThumbnailViewer thumbnailViewer)
    {
        Grid thumbnailViewerGrid = (Grid)thumbnailViewer.Content;
        Canvas thumbnailViewerCanvas = (Canvas)thumbnailViewerGrid.Children[1];
    
        foreach (System.Windows.Shapes.Rectangle separator in thumbnailViewerCanvas.Children)
        {
            if (separator.Tag != null)
            {
                int index = (int)separator.Tag;
    
                if (index >= thumbnailViewer.Images.Count)
                {
                    separator.Visibility = Visibility.Hidden;
                }
                else
                {
                    Size thumbnailSize = new Size(
                        thumbnailViewer.Thumbnails[index].ActualWidth,
                        thumbnailViewer.Thumbnails[index].ActualHeight);
    
                    separator.Height = thumbnailSize.Width;
    
                    int cols, rows;
                    thumbnailViewer.GetThumbnailsGridSize(out cols, out rows);
    
                    int row = index / cols;
                    int col = index % cols;
    
                    Point separatorPosition = new Point();
                    separatorPosition.X = col * thumbnailSize.Width - separator.Width / 2;
                    separatorPosition.Y = row * thumbnailSize.Height;
    
                    Canvas.SetLeft(separator, separatorPosition.X);
                    Canvas.SetTop(separator, separatorPosition.Y);
    
                    separator.Visibility = Visibility.Visible;
                }
            }
        }
    }