Мне нужно, чтобы элемент управления отображался над всеми другими элементами управления, чтобы он частично перекрывал их.
166
Если вы используете Canvas
или Grid
в вашем макете, дайте элемент управления, который будет помещен сверху выше ZIndex
.
Из MSDN :
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="ZIndex Sample">
<Canvas>
<Rectangle Canvas.ZIndex="3" Width="100" Height="100" Canvas.Top="100" Canvas.Left="100" Fill="blue"/>
<Rectangle Canvas.ZIndex="1" Width="100" Height="100" Canvas.Top="150" Canvas.Left="150" Fill="yellow"/>
<Rectangle Canvas.ZIndex="2" Width="100" Height="100" Canvas.Top="200" Canvas.Left="200" Fill="green"/>
<!-- Reverse the order to illustrate z-index property -->
<Rectangle Canvas.ZIndex="1" Width="100" Height="100" Canvas.Top="300" Canvas.Left="200" Fill="green"/>
<Rectangle Canvas.ZIndex="3" Width="100" Height="100" Canvas.Top="350" Canvas.Left="150" Fill="yellow"/>
<Rectangle Canvas.ZIndex="2" Width="100" Height="100" Canvas.Top="400" Canvas.Left="100" Fill="blue"/>
</Canvas>
</Page>
Если вы не укажете ZIndex
, дочерние элементы панели будут отображаться в указанном порядке (то есть последний сверху).
Если вы хотите сделать что-то более сложное, вы можете посмотреть, как ChildWindow
это реализовано в Silverlight. Он перекрывает полупрозрачный фон и всплывающее окно на весь ваш RootVisual
.
Роберт Россни имеет хорошее решение. Вот альтернативное решение, которое я использовал в прошлом, которое отделяет «Наложение» от остального содержимого. Это решение использует преимущество присоединенного свойства,
Panel.ZIndex
чтобы поместить «Наложение» поверх всего остального. Вы можете либо установить видимость «наложения» в коде, либо использоватьDataTrigger
.источник
Элементы управления в той же ячейке сетки отображаются задом наперед. Таким образом, простой способ поместить один элемент управления поверх другого - поместить его в одну и ту же ячейку.
Вот полезный пример, который открывает панель, которая отключает все в представлении (т.е. пользовательский элемент управления) с занятым сообщением, пока выполняется долго выполняемая задача (то есть, когда
BusyMessage
свойство bound не равно нулю):источник
Поместите элемент управления, который вы хотите перенести, в конец кода xaml. Т.е.
источник
Это обычная функция Adorners в WPF. Украшатели обычно отображаются над всеми другими элементами управления, но другие ответы, в которых упоминается z-порядок, могут лучше соответствовать вашему случаю.
источник
источник