Всплывающее управление WPF - находит X, Y координаты

Я пытаюсь получить эти X, Y координаты раскрывающегося управления. Я попробовал:

VisualTreeHelper. GetOffset (Всплывающее окно);

но вектор, возвращаемый всегда, содержит (0,0) для X и Y.

Родитель всплывающего окна является корнем расположения, который является сеткой.

CustomPopupPlacementCallback также всегда возвращается 0,0, поскольку это - параметр Точки.

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

--------------------Обновление--------------------

Chris Nicol, я попробовал Ваш ответ следующим кодом, но все еще получаю 0,0 для rootPoint:

Xaml:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Test.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="800" Height="600">    

<Grid x:Name="LayoutRoot">
    <Popup x:Name="Popup" IsOpen="True" Placement="Center" Width="100" Height="100">
        <Button Click="Button_Click" Content="Test" />
    </Popup>
</Grid>

Код позади:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();

        // Insert code required on object creation below this point.
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        GeneralTransform transform = Popup.TransformToAncestor(LayoutRoot);
        Point rootPoint = transform.Transform(new Point(0, 0));
    }
}
6
задан gamzu07 13 January 2010 в 14:58
поделиться

1 ответ

-

Не уверены, что это лучший способ найти это, но он работает:

GeneralTransform transform = controlToFind.TransformToAncestor(TopLevelControl);
            Point rootPoint = transform.Transform(new Point(0, 0));
2
ответ дан 17 December 2019 в 18:16
поделиться
Другие вопросы по тегам:

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