2012-01-08 3 views
0

Итак, у меня есть все мои элементы управления, хорошо выложенные с использованием сеток и панелей стеков.Как абсолютное положение диалогового окна в WPF MVVM

В некоторых случаях я хотел бы показать диалоговый слой (чтобы добавить настройки и т. Д.). Он не обязательно должен быть модальным, и ему не нужно иметь прозрачный фон. Мне просто нужно, чтобы он был красивым, ненавязчивым и позиционировался абсолютно.

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

Какие варианты?

+0

Почему в мире не используется «окно»? –

+0

Вы хотите показать диалог полностью в другом окне или вне границ существующего окна? –

+0

как при появлении в другом окне? это было бы ужасно. –

ответ

2

Чтобы сделать это, вы можете использовать popup control (установите значение PlacementRectangle для размещения содержимого) или слоя Adorner. Техника adorner описана здесь: http://bignickolson.com/2009/10/15/overlaying-controls-in-wpf-with-adorners/

+0

+1 для всплывающих окон. Вы можете расположить их сверху/снизу/влево/вправо. – Sabuncu

+0

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

+1

Set AllowsTransparency = true для всплывающего меню: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives. popup.allowstransparency.aspx –

0

Я думаю, что вы ищете, чтобы установить Panel.ZIndex в высокое значение для вашего диалога. Затем просто установите видимость, чтобы скрыть диалог. http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.zindex.aspx

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBlock Panel.ZIndex="9999" Background="Green">This TextBlock will always be on top as long as it is visible.</TextBlock> 
     <TextBlock Background="Red">Test</TextBlock> 
    </Grid> 
</Window> 

Вы можете совместить это с диалоговым окном, в этом примере: WPF C# InputBox

+0

спасибо Fuji, но zIndex каким-то образом допускает абсолютное позиционирование? в вашем примере элемент управления все еще находится в этой сетке.в моем случае это будет пользовательский элемент управления, который может быть больше, чем эта сетка. Вот почему мне нужно абсолютное позиционирование. –

+0

Да, это правда. Мое решение работает только в том случае, если вы хотите диалог внутри этой сетки, но до тех пор, пока вы держите его в гриде MainWindow, он должен позволять вам размещать его выше всего остального (в пределах Window Borders ofc). – eandersson

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^