gpt4 book ai didi

silverlight - 动态设置 Popup 位置/放置

转载 作者:行者123 更新时间:2023-12-02 00:41:39 24 4
gpt4 key购买 nike

Popup控件默认左对齐。它的左边缘与其父级的左边缘对齐。

我想做的是让控件右对齐,使其右边缘与其容器的右边缘对齐。

我希望它是动态的,因为我动态绑定(bind)数据并且我不知道弹出窗口有多大。

我试过玩 Opened , SizeChangedLoaded获取 Child 的事件的宽度并将其设置为 HorizontalOffset但似乎存在时间问题。基本上它在第一次加载控件时工作正常,然后就再也没有加载过(HorizontalOffset 设置为 0)。

这是一个错误吗?我做错了吗?

编辑 我让它工作了。似乎存在时间问题。如果我连接 Opened事件并设置 HorizontalOffset异步使用 Dispatcher , 然后就可以了:(



<pre><code> private static void OnPopupOpened(object sender, System.EventArgs e)
{
var popup = (Popup)sender;
popup.Dispatcher.BeginInvoke(() => popup.HorizontalOffset = -popup.ActualWidth);
}
</code></pre>

EDIT 2 我现在意识到我在做一些愚蠢的事情。我想要 PopupComboBox右对齐。我没有看到它在 ArrangePopup 中重新初始化私有(private)方法调用。
我尝试从 ComboBox 继承覆盖放置功能,但我一定是做错了什么,因为尽管我覆盖了调用 ArrangePopup 的方法,但它似乎仍然不起作用。

干杯。

最佳答案

我现在意识到,如果我不回答我自己的问题,就没有人能够将我的变通方法标记为答案。所以这是完整的代码。我将其实现为 PRISM 行为。

public static class PopupRightAlignBehavior
{
public static readonly DependencyProperty InstanceProperty =
DependencyProperty.RegisterAttached("Instance", typeof(object), typeof(PopupRightAlignBehavior), new PropertyMetadata(OnSetInstanceCallback));

public static object GetInstance(DependencyObject obj)
{
return (object)obj.GetValue(InstanceProperty);
}

public static void SetInstance(DependencyObject obj, object value)
{
obj.SetValue(InstanceProperty, value);
}

private static void OnSetInstanceCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var popup = (Popup)d;
popup.Opened -= OnPopupOpened;
popup.Opened += OnPopupOpened;
}

private static void OnPopupOpened(object sender, System.EventArgs e)
{
var popup = (Popup)sender;
popup.Dispatcher.BeginInvoke(() => popup.HorizontalOffset = -popup.ActualWidth);
}
}

关于silverlight - 动态设置 Popup 位置/放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2362352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com