public static void AskUnclaimDevice(ParticleDevice particleDevice, Page page, FrameworkElement placementTarget)
        {
            var flyout       = (Flyout)page.Resources["UnclaimDeviceFlyout"];
            var actionButton = FindNameInContainer <Button>(flyout.Content, "UnclaimDeviceButton");
            var cancelButton = FindNameInContainer <Button>(flyout.Content, "UnclaimCancelButton");

            actionButton.DataContext = particleDevice;

            RoutedEventHandler actionClickDelegate = null;
            RoutedEventHandler cancelClickDelegate = null;

            actionClickDelegate = new RoutedEventHandler(async delegate(object sender, RoutedEventArgs e) {
                actionButton.Click -= actionClickDelegate;

                var unclaimed = await particleDevice.UnclaimAsync();
                if (unclaimed)
                {
                    TinkerData.Devices.Remove(particleDevice);
                }

                flyout.Hide();
            });

            cancelClickDelegate = new RoutedEventHandler(delegate(object sender, RoutedEventArgs e) {
                flyout.Hide();
                cancelButton.Click -= cancelClickDelegate;
            });

            actionButton.Click += actionClickDelegate;
            cancelButton.Click += cancelClickDelegate;

            flyout.ShowAt(placementTarget);
        }