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

Ken*_*hou 4 silverlight silverlight-4.0

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

似乎不同的控件需要不同的方式来定位弹出窗口.像使用LeftButtondown/up事件的图像控件与按钮/链接按钮的点击事件不同.

如何在链接按钮下设置弹出位置?

Ant*_*nes 11

有两种方法.

选项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)
        };
    }
Run Code Online (Sandbox Code Playgroud)

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

选项2

另一种方法是将Popup放在布局中.

 <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>
Run Code Online (Sandbox Code Playgroud)

码:-

    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;
    }
Run Code Online (Sandbox Code Playgroud)

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