Модальное всплывающее окно On usercontrol в WPF - PullRequest
0 голосов
/ 13 декабря 2011

Как я могу открыть модальное всплывающее окно в пользовательском элементе управления (не в главном окне) в wpf, используя шаблон mvvm?

Я надеюсь, что мой вопрос понятен всем, так как я хочу открыть всплывающее окно в usercontrol, а не в окне.

Ответы [ 6 ]

0 голосов
/ 19 октября 2016

Я знаю, что это старый вопрос, но когда я выполнил этот поиск, я нашел много связанных вопросов, но я не нашел действительно четкого ответа. Поэтому я делаю свою собственную реализацию диалогового окна / messagebox / popin и делюсь ею!
https://stackoverflow.com/a/40135791/2546739
Он показывает такие вещи:
2

0 голосов
/ 23 апреля 2016

Используйте Adorner.

public class OpaqueAdorner : Adorner
    {
        public OpaqueAdorner(UIElement win)
            : base(win)
        { }

        protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
        {
            SolidColorBrush renderBrush = new SolidColorBrush(Colors.LightCoral);
            renderBrush.Opacity = 0.3;
            Pen renderPen = new Pen(new SolidColorBrush(Colors.DarkBlue), 5.0);

            drawingContext.DrawRectangle(renderBrush, renderPen,
                new Rect(new Point(0, 0), AdornedElement.DesiredSize));            
        }
    }

/ * Grd - контейнер Сетка * /

private void Btn_Click(object sender, RoutedEventArgs e)
    {
        //GetAdornerLayer was missing ')'
        AdornerLayer.GetAdornerLayer(Grd).Add(new OpaqueAdorner(Grd));
    }

Объедините эту концепцию с Opened / Closed событием Popup.

0 голосов
/ 13 декабря 2011

Это на самом деле довольно сложная тема.
Stackoverflow имеет много информации о диалоговых окнах в MVVM, потому что использует решение, такое как Sree's breaks MVVM

вот хорошее место для начала Обработка диалогов в WPF с MVVM

Кроме того, открытие всплывающего окна в пользовательском контроле или главном окне будет таким же.

0 голосов
/ 13 декабря 2011

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

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

<Popup x:Name="popup">
    <!-- ... -->
</Popup>
<UserControl>
    <UserControl.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsOpen, ElementName=popup}"
                             Value="True">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </UserControl.Style>
<UserControl>
0 голосов
/ 13 декабря 2011

Я не знаю, это то, что вы ожидаете. Открытие всплывающей модели из wpf аналогично открытию модели в обычном приложении для Windows

**ModalWin objWin = new ModalWin();
objWin.ShowDialog();**

С уважением Sree

0 голосов
/ 13 декабря 2011

Модал предназначен для новых окон, а не для пользовательских контролей. Пользовательский контроль - это просто элемент управления внутри страницы или окна.

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

...