Взаимодействие с элементами управления во всплывающем окне WPF без его закрытия - PullRequest
0 голосов
/ 31 октября 2018

В моем приложении WPF я пытаюсь использовать элемент управления Popup в нескольких местах вместо того, чтобы представлять элементы управления в MainWindow, что было бы избыточным и запутанным в моем текущем макете. Следующий XAML показывает мое текущее всплывающее окно и его содержимое.

<Popup x:Name="MainPopup"
       StaysOpen="False"
       Placement="Center"
       PopupAnimation="Slide"
       AllowsTransparency="True">
    <Border BorderBrush="White"
        Background="White"
        BorderThickness="1">
        <Grid Background="White">
            <DataGrid>

            <!--Dummy Data -->

            </DataGrid>
            <Button Click="Button_Click"/>
        </Grid>
    </Border>
</Popup>

Основная проблема заключается в том, что любая попытка взаимодействия с DataGrid или Button приводит к закрытию элемента управления Popup. Я пробовал много разных конфигураций StaysOpen, IsOpen, Focusable, AllowsTransparency, и даже установил свойства фона для реальных цветов.

Две вещи, которые я нашел, что выглядело многообещающе (но не дало никаких положительных результатов), перечислены ниже:

Почему всплывающее окно WPF закрывается при щелчке по фоновой области?

https://social.msdn.microsoft.com/Forums/security/en-US/be1a55df-8008-4af5-b782-5a15f1bc146c/wpf-how-to-restrict-the-popup-from-closing-while-click-on-a-windows-forms-element?forum=wpf

Любая помощь очень ценится. Спасибо!


EDIT

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

  • MainWindow
    • ItemsControl
      • DataGrid (ItemTemplate)
        • Всплывающее окно (CellEditingTemplate)

Пример всплывающего окна: Popup

Итак, когда я прокручиваю до элемента, для которого я хочу увидеть всплывающее окно, я дважды щелкаю по этой ячейке, таким образом, активируя всплывающее окно. Таким образом, любой отдельный Popup является своего рода «размещенным» в одной ячейке DataGrid. Возможно, это связано с проблемой?

1 Ответ

0 голосов
/ 06 ноября 2018

Кажется, что моя проблема была связана с тем, что я фактически использовал отдельный UserControl для размещения моего всплывающего окна. При размещении непосредственно в моем CellEditingTemplate DataTemplate это работало. Поэтому, хотя я не уверен, как исправить первоначальную проблему, мой обходной путь состоял в том, чтобы создать все содержимое Popup внутри собственного DataTemplate (вместо UserControl), что, по-видимому, в основном помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...