Элемент управления Popup
по умолчанию выровнен по левому краю. Его левый край выровнен с левым краем его родителя.
Я хотел бы выровнять элемент управления по правому краю, чтобы его правый край был выровнен по правому краю контейнера.
Я хочу, чтобы это было динамическим, потому что я динамически связываю данные и не знаю, насколько большим будет всплывающее окно.
Я пытался играть с событиями Opened
, SizeChanged
и Loaded
, чтобы получить ширину Child
и установить ее на HorizontalOffset
, но, похоже, есть проблемы с синхронизацией. Как правило, он работает нормально при первой загрузке элемента управления, а затем никогда после этого (HorizontalOffset
установлен на 0).
Это ошибка? Я делаю это неправильно?
РЕДАКТИРОВАТЬ Я получил это работает. Кажется, что есть проблемы со временем. Если я подключу событие Opened
и установлю HorizontalOffset
асинхронно, используя Dispatcher
, то это сработает: (
</p>
<pre><code> private static void OnPopupOpened(object sender, System.EventArgs e)
{
var popup = (Popup)sender;
popup.Dispatcher.BeginInvoke(() => popup.HorizontalOffset = -popup.ActualWidth);
}
РЕДАКТИРОВАТЬ 2 Теперь я понимаю, что делал что-то глупое. Я хотел, чтобы Popup
из ComboBox
был выровнен по правому краю. Я не видел, чтобы он был повторно инициализирован в частном вызове метода ArrangePopup
.
Я попытался унаследовать от ComboBox
, чтобы переопределить функцию размещения, но я, должно быть, делал что-то не так, потому что она все еще не работает, хотя я переопределил методы, которые вызывают ArrangePopup
Приветствие.