【发布时间】:2015-08-05 15:23:45
【问题描述】:
我是 WPF 新手,在调整主窗口大小时遇到了一些问题。我设置它的方式是我有一个名为 MainMapTab 的 .xaml 文件,它基本上只是带有画布的 DockPanel。在 MainMapTab.xaml.cs 文件中,我们有以下代码。
public partial class MainMapTab : UserControl
{
public MainMapTab()
{
InitializeComponent();
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(AddMapKey));
}
[Dependency]
public IUnityContainer UnityContainer { get; set; }
public MainTabPanel MainTabPanel { get; set; }
private void AddMapKey()
{
var myControl = UnityContainer.Resolve<MapKey>();
myControl.MainMapTab = this;
Canvas.SetLeft(myControl, Map.ActualWidth - 525);
Map.Children.Add(myControl);
}
}
在主地图选项卡的初始加载时,子控件的位置非常好。但是在调整主窗口大小时,子控件停留在初始位置,因此浪费了巨大的空间。我想要做的是让它贴在主地图选项卡的右上角,但同时保持主地图选项卡上的画布仍然可以在未来进行编辑。目标是在画布上添加另一个控件,并允许用户单击并拖动它们。我认为问题在于 Canvas.SetLeft 方法调用,但我不确定有什么替代方法。
任何有关如何解决此问题的想法将不胜感激。谢谢!
【问题讨论】:
-
删除
Canvas。它不是您想要的合适容器。见WPF Layouts。此外,您不应像这样编写 UI 元素,而应使用 WPF Content Model。 -
感谢@HighCore 我感谢您的反馈。为了允许用户在主选项卡屏幕上拖动图标并将它们放置在他们想要的任何位置,堆栈面板会是更好的解决方案吗?而且我必须对 WPF 内容模型进行更多研究以了解它的使用方式。