Почему моя всплывающая подсказка вылетает, когда я пытаюсь создать StackPanel с двумя дочерними элементами и назначить ее для всплывающей подсказки?

Я пытаюсь вызвать всплывающую подсказку Callisto при щелчке правой кнопкой мыши по сетке в GridView (конечная цель - позволить пользователю изменить значение и сохранить его в ApplicationDataContainer). Сначала я попробовал это с примером, который создает меню, которое я нашел в сети - это работает, но я не хочу меню. Поэтому я попытался изменить его из меню на StackPanel с TextBlock и TextBox на нем. Этот код, хотя:

private void ItemView_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
    var flyOut = new Flyout {PlacementTarget = sender as UIElement, Placement = PlacementMode.Mouse};

    var sp = new StackPanel {MinWidth = 240, MinHeight = 80, Orientation = Orientation.Horizontal};

    var tblk = new TextBlock {MinWidth = 60, MinHeight = 72};
    sp.Children.Add(tblk);

    TextBox tb = new TextBox {MinWidth = 120, MinHeight = 72};
    sp.Children.Add(tb);

    flyOut.Content = sp;
    flyOut.IsOpen = true;

    UpdateLayout();        
}

... вылетает и выводит меня на эту строку в App.gics:

if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();

Кстати, я могу в конечном итоге переместить этот код из события RightTapped в его предположительно "правильное" место в настройках Charms, но я считаю, что эту проблему необходимо решить в любом случае.

ОБНОВИТЬ

Я попытался пойти по другому пути, переместив всплывающее окно из "на место" на панель настроек Windows 8:

public ItemsPage()
{
    InitializeComponent();
    SettingsPane.GetForCurrentView().CommandsRequested += OnSettingsPaneCommandRequested;
}

private void ItemView_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
    SettingsPane.Show();
}

private void OnSettingsPaneCommandRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection1Name",
                                                            "Change the name of Section 1", SetAndSaveSectionNames));
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection2Name",
                                                            "Change the name of Section 2", SetAndSaveSectionNames));
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection3Name",
                                                            "Change the name of Section 3", SetAndSaveSectionNames));
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection4Name",
                                                            "Change the name of Section 4", SetAndSaveSectionNames));
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection5Name",
                                                            "Change the name of Section 5", SetAndSaveSectionNames));
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection6Name",
                                                            "Change the name of Section 6", SetAndSaveSectionNames));
}

private void SetAndSaveSectionNames(IUICommand command)
{
    var flyOut = new Flyout(); // flyOut is a Callisto control

    var sp = new StackPanel {MinWidth = 240, MinHeight = 80, Orientation = Orientation.Horizontal};

    var tblk = new TextBlock {MinWidth = 60, MinHeight = 72};
    sp.Children.Add(tblk);
    TextBox tb = new TextBox {MinWidth = 120, MinHeight = 72};
    sp.Children.Add(tb);
    flyOut.Content = sp;
    flyOut.IsOpen = true;

    UpdateLayout();        
}

Тем не менее, происходит то же самое - я могу нормально получить вызов SetAndSaveSectionNames(), щелкнув правой кнопкой мыши одну из сеток в моем GridView (ItemView_RightTapped), а затем выбрав один из

"Изменить имя раздела N" TextBlocks или что-то еще на панели настроек, но затем: крах!

Если парень хочет иметь десятки настроек на панели "Настройки", как это будет работать - кажется, там не будет места гораздо больше, чем шесть, которые я добавил - будет ли он давать ViewBox или ScrollBox или что-то еще, чтобы приспособиться к этому?

1 ответ

Решение

Исключением, вероятно, является NotImplementedException, поскольку в коде Callisto не реализована опция PlacementMode.Mouse. У меня была эта проблема сегодня.

См.: https://github.com/timheuer/callisto/blob/master/src/Callisto/Controls/Flyout/Flyout.cs

case PlacementMode.Mouse:
    throw new NotImplementedException("Mouse PlacementMode is not implemented.");
Другие вопросы по тегам