Отображение модальных диалогов с помощью PRISM 4 - PullRequest
1 голос
/ 29 марта 2012

Я занимаюсь разработкой приложения .NET 4.0 с использованием PRISM и MVVM, а также WPF.

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

Я посмотрел на StockTraderПример RI и их реализация RegionPopupBehavior.По сути, они создали свойство зависимостей, которое позволяет им определять регионы с особым индивидуальным поведением.Это поведение отвечает за обработку рендеринга связанного с ним представления, следовательно, отображает его как всплывающее окно.

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

Мне было интересно, есть ли лучший и более простой подход к отображениюмодальные всплывающие окна в Prism?

1 Ответ

2 голосов
/ 29 марта 2012

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

Обычно я использую это так:

<local:PopupPanel 
    Content="{Binding PopupContent}"
    local:PopupPanel.PopupParent="{Binding ElementName=SomeParentPanel}"
    local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}">

    <local:PopupPanel.Resources>
        <DataTemplate DataType="{x:Type local:SomeViewModel}">
            <local:SomeView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:DifferentViewModel}">
            <local:DifferentView />
        </DataTemplate>
    </local:PopupPanel.Resources>

</local:PopupPanel>

Хотя вы также можете просто написать Контент во всплывающем окне вместо привязки свойства Контент

<local:PopupPanel 
    local:PopupPanel.PopupParent="{Binding ElementName=SomeParentPanel}"
    local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}">

    <Border BorderBrush="Blue" BorderThickness="2">
        <local:MyUserControl />
    </Border>
</local:PopupPanel>
...