Вопрос по user-controls, mvvm, wpf, datagrid, c# – wpf: как всплыть пользовательский контроль?

5

Справочная информация: у меня есть проект, который использует сетку данных для отображения данных, и сетка данных имеет столбец rowdetail, который включает пользовательский контроль. В usercontrol есть текстовое поле для ввода и отображения сообщений.

Проблема: я хочу сделать всплывающее окно usercontrol, когда я нажимаю кнопку, и всплывающее usercontrol имеет тот же контекст, что и usercontrol 's в столбце строк подробных данных. Намерение сделать это состоит в том, чтобы облегчить пользователям взаимодействие с пользовательским контролем, потому что это пространство ячейки детализации строки ограничено.

Usecontrol должен быть реализован, и он может нормально работать в ячейке rowdetail. Тем не менее, я понятия не имею о том, как открыть его без изменения его контекста, такого как источник данных, сообщения были отображены в TextBox и т. Д. Кто-нибудь может дать мне несколько советов? Кстати, я использую шаблон MVVM.

РЕДАКТИРОВАТЬ: Вот RowDetailTemplate:

    
    
        
            
            
        
        
        
        .....
    

Вот пользовательский контроль (MyUserControl в приведенных выше кодах):



    
        
            
                
                    
                            
                    
                
            
                                
                
                    
                        
                    
                
            
        
    

Можете ли вы поделиться своим кодом DataGrid и usercontrol ...? Nitin
@nit, я редактировал проблему. Gate Luma
Можно'Вы реализуете это на MessageBox с вашим пользовательским контролем? ThomasFey

Ваш Ответ

2   ответа
7

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

Затем вы можете добавить usercontrol во всплывающее окно, а затемшоу' всплывающее окно Таким образом, DataContext для всплывающего окна и, следовательно, для usercontrol наследуется от содержащей строки в сетке данных.

Ниже приведена очень простая реализацияPopup контролировать только с помощью XAML:

<stackpanel>
  <checkbox name="chk1">
  <popup isopen="{Binding IsChecked, ElementName=chk1}">
    <border background="White">
      <textblock margin="20" text="I'm Popped Up!">
    </textblock></border>
  </popup>
</checkbox></stackpanel>

Всплывающее окно включено в панель стека, но отображается толькоIsOpen, когда флажок установлен. Вы бы поместили свой пользовательский контроль во всплывающее окно, где я поместил границу и текстовый блок. Поскольку всплывающее окно является членом стековой панели, оно автоматически использует DataContext стековой панели, если оно не имеет своего собственного.

В вашем случае стековая панель, которую я показываю, будет аналогична вашей строке DataGrid.

Привет, я никогда не использовал Popup Control. Не могли бы вы привести несколько простых примеров? Благодарю. Gate Luma
Использование всплывающего управления - хорошая идея. Но я не знаю, можно ли добавить системное меню, например, Закрыть, Развернуть и восстановить, как в обычном окне. Gate Luma
1

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

Образец всплывающего окна XAML:архив ссылок |оригинальная ссылка

Если вы скачаете этот образец и посмотрите файлы .xaml и .cs для Senario1, вы 'У меня будет прекрасный пример того, как использовать и реализовать всплывающее окно. В качестве альтернативы вы можете просто просмотреть код на сайте, но мне кажется, что возможность запуска и взаимодействия с образцом более полезна, чем просто просмотр кода.

Похожие вопросы