Если я правильно интерпретирую ваше сообщение, вам нужно что-то, что работает подобно тому, что
Билли Холлис демонстрирует в своем приложении StaffLynx .
Недавно я создал аналогичный элемент управления, и оказалось, что такого рода идеи относительно просто реализовать в WPF. Я создал пользовательский элемент управления под названием DialogPresenter. В шаблон элемента управления для пользовательского элемента управления я добавил разметку, подобную следующей:
<ControlTemplate TargetType="{x:Type local=DialogPresenter}">
<Grid>
<ContentControl>
<ContentPresenter />
</ContentControl>
<!-- The Rectangle is what simulates the modality -->
<Rectangle x:Name="Overlay" Visibility="Collapsed" Opacity="0.4" Fill="LightGrey" />
<Grid x:Name="Dialog" Visibility="Collapsed">
<!-- The template for the dialog goes here (borders and such...) -->
<ContentPresenter x:Name="PART_DialogView" />
</Grid>
</Grid>
<ControlTemplate.Triggers>
<!-- Triggers to change the visibility of the PART_DialogView and Overlay -->
</ControlTemplate.Triggers>
</ControlTemplate>
Я также добавил метод Show(Control view)
, который находит 'PART_DialogView' и добавляет переданное представление в свойство Content
.
Это позволяет мне использовать DialogPresenter
следующим образом:
<controls:DialogPresenter x:Name="DialogPresenter">
<!-- Normal parent view content here -->
<TextBlock>Hello World</TextBlock>
<Button>Click Me!</Button>
</controls:DialogPresenter>
Для обработчика событий кнопок (или связанной команды) я просто вызываю метод Show () DialogPresenter
.
Вы также можете легко добавить разметку ScaleTransform в шаблон DialogPresenter, чтобы получить эффекты масштабирования, показанные в видео. Это решение имеет аккуратный и понятный пользовательский код управления и очень простой интерфейс для вашей команды программистов пользовательского интерфейса.
Надеюсь, это поможет!