【问题标题】:WPF set new control position relative within a gridWPF 在网格内设置新的控件相对位置
【发布时间】:2015-12-12 18:43:07
【问题描述】:

这与其他问题有些重复,因此提前道歉,但我无法理解现有答案(可能是因为我是 WPF 新手)。

我在画布中有一个网格。网格是以编程方式添加的,而不是在 xaml 中,并且比画布小得多。我想以编程方式在用户单击网格的位置添加一个控件(文本框)。应用程序可能是全屏的,也可能不是全屏的,用户的屏幕分辨率可能不同。

目前我正在使用鼠标按下事件并获得一个点:

Dim p As Point = Mouse.GetPosition(myGrid)

然后将 point.x 和 point.y 与 Canvas.SetLeft 和 Canvas.SetTop 一起使用,但这仅在应用全屏且屏幕分辨率一致时有效。

我知道询问代码是一种不好的形式,但请在你的答案中包含一个 sn-p,因为我已经为此苦苦挣扎了一段时间并绕圈子。我正在使用 VB,但欢迎使用任何语言的答案。非常感谢。

【问题讨论】:

    标签: wpf grid position controls


    【解决方案1】:

    Grid 基本上将它的孩子安排在孩子的Margin 属性上。 所以在你的网格中这样做OnClick

    // dont forget to add an event handler on creating the grid
    Grid myGrid = new Grid();
    myGrid.MouseDown += myGrid_MouseDown;
    
    private void myGrid_MouseDown(object sender, MouserEventArgs e)
    {
        Point p = e.GetPosition(myGrid);        
    
        TextBox tb = new TextBox();
        tb.Margin = new Thickness(p.X, p.Y, 0, 0);
        tb.HorizontalAlignment = HorizontalAlignment.Left;
        tb.VerticalAlignment = VerticalAlignment.Top; // cuz we set margin on Top and Left sides..
    
        myGrid.Children.Add(tb);
    }
    

    希望对你有帮助:)

    【讨论】:

      【解决方案2】:

      我认为问题不在于您的代码,而在于您的 xaml。

      Mouse.GetPosition(myGrid)
      

      应该很好用。

      我认为您的 Grid 与 Canvas 的大小不同。 试试这样的:

        <DockPanel>
          <Canvas x:Name="can">
            <Grid Height="{Binding ElementName=can, Path=ActualHeight}" Width="{Binding ElementName=can, Path=ActualWidth}" Background="Red" PreviewMouseDown="Grid_PreviewMouseDown" />
          </Canvas>
        </DockPanel>
      

      【讨论】:

      • 感谢您的回复。我应该说网格是以编程方式添加的,而不是在 xaml 中,并且比画布小得多。 OP 已更新。
      • 所以不要将鼠标位置相对于您的网格,而是相对于您的画布。 Dim p As Point = Mouse.GetPosition(yourCanvas)
      • 谢谢。文本框必须是网格的子项,因为稍后我将导出网格和所有用户添加的内容,例如文本框作为图像。所以 Canvas.SetLeft 等将不起作用。我可以用什么来精确移动网格内的文本框(即不是行或列,而是 x / y)?干杯。
      • 如果你想像网格的孩子一样添加文本框,那么你为什么要设置它们与画布的距离?如果您想将 TextBox 作为网格的子项,您可以从 Mouse.GetPosition(myGrid) 拍摄的点开始处理它们的边距
      • 您可以使用文本框的边距。
      猜你喜欢
      • 2017-10-22
      • 1970-01-01
      • 2011-02-15
      • 2012-02-16
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2011-01-27
      • 2023-04-04
      相关资源
      最近更新 更多