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

Я предполагаю, что это - то, что Вы хотите:

var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';

(Необходимо выйти "\" в строке (превращение его в двойное - "\"), иначе это станет новой строкой в источнике JSON, не данных JSON.)

45
задан Dan J 6 November 2012 в 23:39
поделиться

4 ответа

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

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

// Reference to the PlacementTarget.
DependencyObject myPopupPlacementTarget;

// Reference to the popup.
Popup myPopup; 

Window w = Window.GetWindow(myPopupPlacementTarget);
if (null != w)
{
    w.LocationChanged += delegate(object sender, EventArgs args)
    {
        var offset = myPopup.HorizontalOffset;
        myPopup.HorizontalOffset = offset + 1;
        myPopup.HorizontalOffset = offset;
    };
}

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

Я все еще оцениваю, является ли всплывающее окно лучшим вариантом в тех случаях, когда элемент управления остается открытым во время другого взаимодействия. Я думаю, что предложение Рэя Бернса поместить этот материал в слой Adorner кажется хорошим подходом для некоторых сценариев.

75
ответ дан 26 November 2019 в 20:55
поделиться

Вы не можете этого сделать. Когда всплывающее окно отображается на экране, оно не перемещается, если перемещается его родительский элемент. Это поведение элемента управления Popup. проверьте это: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.aspx

вы можете использовать Window (с WindowStyle = None) вместо Popup это может решить вашу проблему.

0
ответ дан 26 November 2019 в 20:55
поделиться

Загрузите образец Popup Popup Position по адресу:

http://msdn.microsoft.com/en-us/library/ms771558(v=VS.90).aspx

Пример кода использует класс CustomPopupPlacement с объектом Rect и привязывается к горизонтальному и вертикальному смещению для перемещения Popup.

<Popup Name="popup1" Placement="Bottom" AllowsTransparency="True"
       IsOpen="{Binding ElementName=popupOpen, Path=IsChecked}"
       HorizontalOffset="{Binding ElementName=HOffset, Path=Value, Mode=TwoWay}"
       VerticalOffset="{Binding ElementName=VOffset, Path=Value, Mode=TwoWay}"
-1
ответ дан 26 November 2019 в 20:55
поделиться

Если вы хотите переместить всплывающее окно, есть простой трюк: измените его положение, затем установите:

IsOpen = false;
IsOpen = true;
3
ответ дан 26 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: