我想在点击按钮时显示一些输入窗口。窗口应放在按钮的正下方(绿色圆圈是按钮,白色是新窗口):
如何获取按钮的位置以在MVVM中设置新窗口的位置?
我在视图中有这样的按钮:
<Button Command="{Binding LoginCommand}"/>
viewmodel中的命令:
private void ExecuteLoginCommand()
{
var dialog = new UserLogin();
dialog.ShowDialog();
}
将按钮的位置绑定到VM然后将其发送到新窗口可能是一个解决方案,但它是一个好的吗?
答案 0 :(得分:0)
您可以使用Button
方法检索视图中TransformToAncestor
的相对位置:Get Absolute Position of element within the window in wpf。
在调用视图模型的命令之前,您可以在视图的代码隐藏或附加行为(https://www.codeproject.com/Articles/28959/Introduction-to-Attached-Behaviors-in-WPF)中执行此操作。
获得坐标后,您可以将这些作为参数传递给命令:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
Point relativePoint = button.TransformToAncestor(this).Transform(new Point(0, 0));
var vm = DataContext as YourViewModel;
//pass the Point itself or create a custom class yourself and pass an instance of this one here
vm.LoginCommand.Execute(relativePoint);
}