【问题标题】:Setting the X and Y coordinates of a UIelement within a Canvas progmatically以编程方式在 Canvas 中设置 UI 元素的 X 和 Y 坐标
【发布时间】:2014-08-08 21:14:44
【问题描述】:

管理员:对不起,如果我在错误的论坛上问这个问题,我是整个 SE 网络的新手。

我从事一个项目已经有一段时间了,但现在我陷入了困境。该项目是一个用 C# 和 XAML 编写的通用 Windows 8.1 运行时应用程序。下面是一个来自项目的 Windows 8.1 部分的函数,称为 updateMapGUI()。它在触发事件后调用,并将项目添加到页面上预先存在的画布中。

private void updateMapGUI()
{
    while (mapCanvas.Children.Count > 0)
    {
        mapCanvas.Children.RemoveAt(0);
    }
    panelTracker = 0;
    foreach (User i in activeUsers)
    {
        if(i == null)
        {
            return;
        }
        else
        {
            //Update the mapCanvas with data from the appropriate User object from the array activeUsers[]
            dotpanels[panelTracker] = new Canvas();
            mapCanvas.Children.Add(dotpanels[panelTracker]);
            dotpanels[panelTracker].Height = 3;
            dotpanels[panelTracker].Width = 3;
            dotpanels[panelTracker].Left = getXOffset(i);
            dotpanels[panelTracker].Up = getYOffset(i);
            if (i.isSelected == false)
            {
                SolidColorBrush unselectedDot = new SolidColorBrush(Windows.UI.Colors.Blue);
                dotpanels[panelTracker].Background = unselectedDot;
            }
            else
            {
                SolidColorBrush selectedDot = new   SolidColorBrush(Windows.UI.Colors.Green);
                dotpanels[panelTracker].Background = selectedDot;
            }
            panelTracker++;
        }
    }
}

dotpanels 是一个 canvas[] 数组,而 panelTracker 是一个 int[] 数组。问题在于 dotpanels[panelTracker].Left 和 dotpanels[panelTracker].Up。根据文档,可以在画布的任何子级上调用此函数(不太确定我是否正确阅读)。编译器说 dotpanels[panelTracker] 中的 Canvas 不包含向上或向左的定义。我究竟做错了什么?如果不可能,我基本上需要做的是在特定的 X 和 Y 位置显示一些点。提前感谢您的回复!

【问题讨论】:

  • 考虑在画布对象上添加变换。它们具有可以帮助您的 TranslateX 和 TranslateY 属性。
  • 我该怎么做?我能找到的唯一例子是反向使用它来找到一个点。 (对不起,我的菜鸟问题,我对整个 XAML 和 WinRT 的东西都是新手)

标签: c# windows xaml windows-runtime wpf-controls


【解决方案1】:

Canvas.LeftCanvas.Top(不是Up)是attached properties,通过静态getter 和setter 方法在代码中访问:

Canvas.SetLeft(dotpanels[panelTracker], getXOffset(i));
Canvas.SetTop(dotpanels[panelTracker], getYOffset(i));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多