Ionascut Mihai Ответов: 0

Не вижу контекстного меню на экране windows phone


У меня есть текстовый блок и контекстное меню. Когда я держу TextBlock, я открываю ContextMenu. Контекстное меню открывается, потому что пользовательский интерфейс ведет себя правильно, но я не вижу контекстного меню на экране.
Это мой код:
ContextMenu cm;
TextBlock tb;
private void BuildTB()
{
    cm = new ContextMenu();
    cm.Background = new SolidColorBrush(Colors.Black);
    MenuItem menuItem = new MenuItem()
    {
        Header = "Edit",
        Foreground = new SolidColorBrush(Colors.White),
        Background = new SolidColorBrush(Colors.Black)
    };
    menuItem.Click += EditItem_Click;
    cm.Items.Add(menuItem);

    tb = new TextBlock();
    tb.Text = "My text block";
    tb.Hold += OpenCM;
    ContextMenuService.SetContextMenu(tb, cm);
}

private void OpenCM(object sender, System.Windows.Input.GestureEventArgs e)
{
    TextBlock tb = (TextBlock)sender;
    ContextMenu cm = ContextMenuService.GetContextMenu(tb);
    cm.IsOpen = true;
}


Что я уже пробовал:

Я искал ответ, но не мог найти. Если кто-то знает ответ, Пожалуйста, помогите мне!

[no name]

Вы можете попробовать https://msdn.microsoft.com/en-us/library/ms743607(v=против 110). aspx

Foothill

Если вы используете Windows Phone 8.1, это может помочь
http://igrali.com/2014/04/28/show-context-menu-using-menuflyout-windows-phone-8-1/

Ionascut Mihai

Я использую WP 8.1, но Silverlight и я не могу использовать MenuFlyout

Foothill

Можете ли вы установить место размещения? Может быть, он отображается за пределами экрана.

Ionascut Mihai

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

Foothill

Можно попробовать заменить туберкулез.Держи += OpenCM с туберкулезом.Удерживайте += (s, e) = & gt; { см.IsOpen = true;}; и переместите вызов open в лямбда-выражение внутри функции BuildTB ().

Ionascut Mihai

Я нищий, и я не знаю, что "(s, e) = & gt; { cm.IsOpen = true;}; " do. Можно со мной поболтать?

Foothill

На самом деле нет, так как я ухожу с работы примерно через 4 минуты, но это лямбда-выражение или анонимная функция, которая может быть встроена в код. Я нахожу их очень полезными при работе с обработчиками событий. Но эти две линии действительно идентичны
общественного недействительными OnTextboxOpen(объект отправителя, EventArgs в е) { //обрабатываем событие }
(s, e) =? {//событие обработки }

В этом контексте => больше похож на указатель функции.

Ionascut Mihai

Хорошо, я попробую вашу альтернативу и скажу Вам, работает ли она.

0 Ответов