gpt4 book ai didi

c# - 在WPF中放置对话框窗口

转载 作者:行者123 更新时间:2023-12-03 10:36:11 25 4
gpt4 key购买 nike

我有一个命令按钮,可以启动一个单独的窗口。我使用的是MVVM Cross体系结构,因此该窗口通过ViewModel中的命令输入。我这样做的方法是在显示窗口的UI层中注册服务,然后在命令中注册以解析该服务并显示窗口:

public static void ShowMyWindow()
{
IShowMyWindowService myService = Mvx.Resolve<IShowMyWindowService>();

myService.ShowWindow();
}

然后,在服务中(位于UI层中):
public void ShowWindow()
{
Window myWindow = new Window();
myWindow.Content = new MyUserControl();

Application.Current.Dispatcher.Invoke(() =>
{
myWindow.Owner = Application.Current.MainWindow;

// Need to set x, y to the position of the button that invoked the command
myWindow.Left = x;
myWindow.Top = y;

myWindow.ShowDialog();
});
}

我的问题是我想在相对于启动它的命令按钮的位置显示新对话框。经过一些研究,似乎我需要 FrameworkElement.PointToScreen()方法,尽管我不能确定的是如何在不中断关注点的情况下访问此信息。

我要采用正确的方法还是更简单的方法?如果我是,那么我如何通过命令来传递框架元素?

最佳答案

您应该有一个方法/命令,例如:

public static void ShowMyWindow(WindowAbsoluteLocationPosition pos)
{
IShowMyWindowService myService = Mvx.Resolve<IShowMyWindowService>();

myService.ShowWindow(pos);
}

如果这样做,则应将 CommandParameterConverter结合使用:
<Button Command="{Binding YourCommand}" 
CommandParameter="{Binding ElementName=YourWindow,
Converter={StaticResource yourConverter}}" />

基本上可以将 YourWindow转换为传递给viewModel的正确 WindowAbsoluteLocationPosition(用户定义)结构。注意;您还应该将按钮传递给转换器,以具有更好的“可重用性”。

关于c# - 在WPF中放置对话框窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522562/

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