Не вижу контекстного меню на экране 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
Хорошо, я попробую вашу альтернативу и скажу Вам, работает ли она.