Я пытаюсь получить эти 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));
}
}
Не уверены, что это лучший способ найти это, но он работает:
GeneralTransform transform = controlToFind.TransformToAncestor(TopLevelControl);
Point rootPoint = transform.Transform(new Point(0, 0));