【问题标题】:UserControl Position用户控制位置
【发布时间】:2011-11-15 18:29:12
【问题描述】:

我正在开发一个 WPF 应用程序,并且我创建了一个自定义用户控件,因为我需要在主窗口上创建它的实例。所以,这就是我创建新实例的方式:

        var MyCard = new vCard();
        MainGrid.Children.Add(MyCard);
        Grid.SetColumn(MyCard, 1);
        Grid.SetRow(MyCard, 0);

但是我需要把每一个都按顺序排列,所以,我该如何设置每一个的 X & Y 位置。我尝试在我的用户控件中创建一个方法来设置边距属性,例如:

    public void SetX(double X)
    {
        double  Y =this.Margin.Top;            
        this.Margin = new Thickness(X, Y, 0, 0);            
    }

但是,它不起作用。还有其他方法吗?

【问题讨论】:

  • 如果您想在 Grid 单元格中执行任意 X、Y 定位,请尝试在该网格位置放置一个 Canvas,然后使用 Canvas.Left 和 Canvas.Top 附加属性将控件定位在帆布。

标签: c# wpf user-controls


【解决方案1】:

将控件添加到Grid 容器时,应通过设置ColumnRow 来设置其位置。

为此,您需要将网格配置为具有添加新用户控件所需的行数和列数。

【讨论】:

    【解决方案2】:

    一个经常被忽视的控件是UniformGrid

    <UniformGrid Name="MainGrid" Rows="3" Columns="2"/>
    

    像以前一样继续添加UserControl

    var MyCard = new vCard();
    MainGrid.Children.Add(MyCard);
    

    这将为您的物品提供一个漂亮且分布均匀的容器。如果你想调整项目之间的间距,有几种方法可以做到,最简单的方法是调整 UserControl 本身的 Margin 属性。

    <UserControl Margin="8" ... />
    

    【讨论】:

      【解决方案3】:

      我会为这些对象创建一个ObservableCollection 并将它们放在堆栈面板中。这样您就可以添加/删除/订购用户控件。然后你可以设置堆栈内的大小。

      【讨论】:

        猜你喜欢
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 1970-01-01
        相关资源
        最近更新 更多