【问题标题】:Keeping WPF Margins with nested controls when re-sizing window调整窗口大小时使用嵌套控件保持 WPF 边距
【发布时间】: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 内容模型进行更多研究以了解它的使用方式。

标签: c# wpf xaml


【解决方案1】:

Canvas.SetRight代替Canvas.SetLeft怎么样?

【讨论】:

  • 是的,我尝试将其作为选项。它将控件移动到具有相同静态定位问题的窗口的中间(ish),只是在不同的位置。
  • 到目前为止我发现了什么,通过使用堆栈面板,我可以给嵌套控件一个静态的右边距和上边距,所以它总是与这两个边的给定距离,所以它会根据需要移动。
【解决方案2】:

更改为堆栈面板而不是建议的画布修复了调整大小的问题。在此窗口上单击和拖动 UI 元素可能仍然存在问题。但是可以使用堆栈面板内的嵌套画布来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2011-03-30
    • 2013-03-27
    • 2010-10-24
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多