private IClipboardDataControlPackage ConstructPackage(
            IEnumerable<uint> formats)
        {
            var package = new ClipboardDataControlPackage();
            DecoratePackageWithClipboardData(formats, package);
            userInterfaceThread.Invoke(() => DecoratePackageWithControl(package));

            return package;
        }
        private void DecoratePackageWithControl(
            ClipboardDataControlPackage package)
        {
            foreach (var data in package.Contents)
            {
                var dataFactory = dataFactories.FirstOrDefault(x => x.CanBuildControl(data));
                if (dataFactory == null) continue;

                package.Control = dataFactory.BuildControl(data);
                break;
            }
        }