private void DocumentEntity_DoubleClick(DocumentEntity e)
        {
            // first check
            if (e == null || e.DigitalFile == null || e.DigitalFile.Trim().Length < 1 || this.theEventStack == null)
            {
                return;
            }

            try
            {
                // temp input
                var inputFn = e.DigitalFile;
                try
                {
                    if (!inputFn.ToLower().Trim().StartsWith("http://") &&
                        !inputFn.ToLower().Trim().StartsWith("https://"))
                    {
                        inputFn = thePackage.MakePackageFileAvailableAsTempFile(inputFn);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Making local file available");
                }

                // give over to event stack
                var evt = new AasxPluginResultEventDisplayContentFile();
                evt.fn = inputFn;
                this.theEventStack.PushEvent(evt);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "when double-click");
            }
        }
 private void Hyperlink_Click(object sender, RoutedEventArgs e)
 {
     if (sender is Hyperlink lnk &&
         lnk.Tag is string furtherUrl)
     {
         // give over to event stack
         var evt = new AasxPluginResultEventDisplayContentFile();
         evt.fn = "" + furtherUrl;
         evt.preferInternalDisplay = true;
         _eventStack?.PushEvent(evt);
     }
 }
        public void UpdateDisplay()
        {
            // access
            var inst = this.DataContext as FormInstanceListOfSame;
            var desc = inst?.workingDesc as FormDescSubmodelElement;

            if (inst == null || desc == null || GridOuterElement == null || GridInner == null)
            {
                return;
            }

            // obligatory
            this.TextBlockFormTitle.Text      = "" + desc.FormTitle;
            this.TextBlockFormInfo.Text       = "" + desc.FormInfo;
            this.TextBlockFormInfo.Visibility = (this.TextBlockFormInfo.Text.Trim() != "")
                ? Visibility.Visible
                : Visibility.Collapsed;

            // url link
            ButtonFormUrl.Visibility = Visibility.Hidden;
            if (desc.FormUrl != null && desc.FormUrl.Length > 0)
            {
                ButtonFormUrl.Visibility = Visibility.Visible;
                ButtonFormUrl.Click     += (object sender3, RoutedEventArgs e3) =>
                {
                    // try find topmost instance
                    var top     = FormInstanceHelper.GetTopMostParent(inst);
                    var topBase = top as FormInstanceBase;
                    if (topBase != null && topBase.outerEventStack != null)
                    {
                        // give over to event stack
                        var evt = new AasxPluginResultEventDisplayContentFile();
                        evt.fn = desc.FormUrl;
                        evt.preferInternalDisplay = true;
                        topBase.outerEventStack.PushEvent(evt);
                    }
                };
            }

            // (re-) create rows
            GridInner.Children.Clear();
            GridInner.RowDefinitions.Clear();
            int ri = 0;

            foreach (var si in inst.SubInstances)
            {
                if (si?.subControl != null)
                {
                    // row
                    var rd = new RowDefinition();
                    rd.Height = GridLength.Auto;
                    GridInner.RowDefinitions.Add(rd);

                    // have the control itself
                    var sc = si.subControl;

                    Grid.SetRow(sc, ri);
                    Grid.SetColumn(sc, 0);
                    GridInner.Children.Add(sc);

                    if (this.showButtonsMinus)
                    {
                        // make a button like the "-"
                        var bt = CreateButtonLike(ButtonInstancePlus, content: "&#10134;");
                        bt.VerticalAlignment = VerticalAlignment.Top;
                        bt.Content           = "\u2796";

                        if (inst.workingDesc != null && inst.workingDesc is FormDescSubmodelElementCollection)
                        {
                            bt.Margin = new Thickness(
                                bt.Margin.Left, bt.Margin.Top + 6, bt.Margin.Right, bt.Margin.Bottom);
                        }

                        bt.SetBinding(
                            Button.WidthProperty, CreateBindingWithElementName("ActualWidth", "ButtonInstancePlus"));
                        bt.SetBinding(
                            Button.HeightProperty, CreateBindingWithElementName("ActualHeight", "ButtonInstancePlus"));

                        // remeber the instances
                        var masterInst = inst;
                        var subInst    = si;

                        // attach the lambda
                        bt.Click += (object sender, RoutedEventArgs e) =>
                        {
                            if (inst.SubInstances.Count > this.minRows)
                            {
                                // carefully delete
                                try
                                {
                                    masterInst.SubInstances.Remove(subInst);
                                }
                                catch (Exception ex)
                                {
                                    AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
                                }

                                // redraw
                                UpdateDisplay();
                            }
                        };

                        Grid.SetRow(bt, ri);
                        Grid.SetColumn(bt, 1);
                        GridInner.Children.Add(bt);
                    }
                    else
                    {
                        // give the subcontrol a little more room
                        Grid.SetColumnSpan(sc, 2);
                    }

                    // next row
                    ri++;
                }
            }
        }