Как сделать usercontrol на самом верху в wpf? - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть сетка, которая содержит три строки.Первый ряд содержит те, которые показывают панель инструментов.Вторая строка содержит строку состояния.Третья строка содержит список, который связан с данными для наблюдаемой коллекции.

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

Я думал использовать всплывающее окно, проблема с всплывающим окном заключается в том, что он не будетперемещать вместе с родительским элементом управления при перемещении окна.

Поэтому я решил создать пользовательский элемент управления (скажем, mypopup), который добавляется программно во второй строке с более высоким ZIndex, проблема в том, что даже если я установлю более высокий индексон идет за ListboxItems.

a) Есть ли какое-нибудь решение для этого?

В качестве решения я подумал использовать Adorner для этого пользовательского элемента управления (mypopup), проблема в моем пользовательском элементе управления (mypopup).) содержит кнопку и флажок, после применения Adorner эти элементы управления не доступны.

b) Есть ли идея сделать интерактивный пользовательский элемент управления с Adorner?

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Украсители не дадут вам интерактивности. Они просто основаны на рисовании. Таким образом, они не будут реагировать, как пользовательский элемент управления, если вы не «имитируете» его. Так что давайте пока оставим их в стороне.

Используйте только всплывающие окна. Установите цель размещения и ориентацию размещения. Всплывающее окно расположено в верхнем левом углу кнопки.

        popup.PlacementTarget = MyButton;
        popup.Placement = PlacementMode.Relative;

Он перемещается вдоль цели размещения, т. Е. MyButton. Для этого я изменяю поле кнопки и соответственно перемещаю всплывающие окна. Чтобы этот эффект имел место, вам нужно скрыть всплывающее окно и сбросить цель его размещения.

        popup.IsOpen = false;
        popup.PlacementTarget = null;
        MyButtonMargin = new Thickness(MyButton.Margin.Left + 10);
        popup.PlacementTarget = MyButton;
        popup.IsOpen = true; 

Дайте мне знать, если это поможет.

0 голосов
/ 26 сентября 2011
<Window...>
<Grid>
   <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
      <RowDefinition Height="*" />
   </Grid.RowDefinitions>

   <Toolbar Grid.Row="0" ... />
   <Statusbar Grid.Row="1" ... />
   <ListBox Grid.Row="2" ... />

   <OverlayControl Grid.Row="0" Grid.RowSpan="3" 
                   HorizontalAlignment="Stretch" 
                   VerticalAlignment="Stretch" />
</Grid>
</Window>

OverlayControl:

<UserControl ...>
<Grid Background="#30000000">
   <Border HorizontalAlignment="Center" VerticalAlignment="Center" ...>
        Content, e.g. TextBlock with a message 
   </Border>
</Grid>
</UserControl>

Не устанавливайте ширину в пользовательском контроле, поскольку он должен растягиваться, используйте d: DesignWidth / Height, если вам нужно.Порядок имеет значение, последний находится над другими в том же ряду.Измените строку и строку, если вы хотите, чтобы она занимала только 3-ю строку.

...