gpt4 book ai didi

silverlight - 如何使用silverlight 4在点击事件中定位弹出窗口?

转载 作者:行者123 更新时间:2023-12-04 22:37:25 27 4
gpt4 key购买 nike

我尝试使用链接按钮单击事件来创建一个带有一些数据列表的弹出窗口。但是弹出窗口的默认位置是整个浏览器窗口的左上角。

似乎不同的控件需要不同的方式来定位弹出窗口。像带有 LeftButtondown/up 事件的图像控件将不同于按钮/链接按钮的单击事件。

如何设置链接按钮正下方的弹出位置?

最佳答案

有两种方法。

选项 1

您可以通过其 Horizo​​ntalOffset 和 VerticalOffset 属性来定位弹出窗口。您只需要练习将它们设置为哪些值。像这样:-

    private void Button_Click(object sender, RoutedEventArgs e)
{
Popup popup = new Popup();
Button b = (Button)sender;
GeneralTransform gt = b.TransformToVisual(Application.Current.RootVisual);
Point p = gt.Transform(new Point(0, b.ActualHeight));

popup.HorizontalOffset = p.X;
popup.VerticalOffset = p.Y;
popup.Child = new Border()
{
Child = new TextBlock() { Text = "Hello, World!" },
Background = new SolidColorBrush(Colors.Cyan)
};
}

这里我们使用 TrannsformToVisual按钮的方法,用于获取相对于应用程序根视觉对象的转换,该视觉对象与弹出窗口具有相同的原点。使用按钮的实际高度,我们可以到达按钮左下角的一个点。

选项 2

另一种方法是将弹出窗口放置在布局中。
 <StackPanel>
<Button Content="Click Me" Click="Button_Click" />
<Popup x:Name="popup" />
<TextBlock Text="This text will be occluded when the popup is open" />
</StackPanel>

代码:-
    private void Button_Click(object sender, RoutedEventArgs e)
{

popup.Child = new Border()
{
Child = new TextBlock() { Text = "Hello, World!" },
Background = new SolidColorBrush(Colors.Cyan)
};

popup.IsOpen = !popup.IsOpen;
}

在这种方法中,Popup 的原点由布局系统放置,在这种情况下,我们使用了 StackPanel因此弹出窗口直接放置在按钮下方。但是,弹出窗口不占用布局中的任何空间,因此文本块立即出现在按钮下方。

关于silverlight - 如何使用silverlight 4在点击事件中定位弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702044/

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