public static void AskRenameDevice(ParticleDevice particleDevice, Page page, FrameworkElement placementTarget) { var flyout = (Flyout)page.Resources["RenameDeviceFlyout"]; var newDeviceNameGrid = FindNameInContainer <Grid>(flyout.Content, "NewDeviceNameGrid"); var textbox = FindNameInContainer <TextBox>(flyout.Content, "NewDeviceName"); var refreshButton = FindNameInContainer <Button>(flyout.Content, "RefreshButton"); var actionButton = FindNameInContainer <Button>(flyout.Content, "RenameDeviceButton"); var cancelButton = FindNameInContainer <Button>(flyout.Content, "RenameCancelButton"); textbox.Text = DeviceNameGenerator.GenerateUniqueName(TinkerData.GetDeviceNames()); textbox.SelectAll(); actionButton.DataContext = particleDevice; RoutedEventHandler refreshButtonDelegate = null; RoutedEventHandler actionClickDelegate = null; RoutedEventHandler cancelClickDelegate = null; refreshButtonDelegate = new RoutedEventHandler(delegate(object sender, RoutedEventArgs e) { textbox.Text = DeviceNameGenerator.GenerateUniqueName(TinkerData.GetDeviceNames()); textbox.SelectAll(); }); actionClickDelegate = new RoutedEventHandler(async delegate(object sender, RoutedEventArgs e) { var newName = textbox.Text; flyout.Hide(); refreshButton.Click -= refreshButtonDelegate; actionButton.Click -= actionClickDelegate; cancelButton.Click -= cancelClickDelegate; await particleDevice.RenameAsync(newName); }); cancelClickDelegate = new RoutedEventHandler(delegate(object sender, RoutedEventArgs e) { flyout.Hide(); refreshButton.Click -= refreshButtonDelegate; actionButton.Click -= actionClickDelegate; cancelButton.Click -= cancelClickDelegate; }); refreshButton.Click += refreshButtonDelegate; actionButton.Click += actionClickDelegate; cancelButton.Click += cancelClickDelegate; flyout.ShowAt(placementTarget); }