Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改网格宽度时更新矩形的宽度_C#_Xaml_Uwp - Fatal编程技术网

C# 更改网格宽度时更新矩形的宽度

C# 更改网格宽度时更新矩形的宽度,c#,xaml,uwp,C#,Xaml,Uwp,您好,我有以下问题:我想用canvas.SetLeft()和canvas.SetTop()方法在画布上绘制一个矩形 我使用UserControl_load()方法,一切正常。 问题是,在调整窗口大小和网格大小时,如果使用ActualWidth,则该值不会更改,我留下的值不再准确 private void UserControl_Loaded(object sender, RoutedEventArgs e) { Rectangle rett = new Rec

您好,我有以下问题:我想用canvas.SetLeft()和canvas.SetTop()方法在画布上绘制一个矩形

我使用UserControl_load()方法,一切正常。 问题是,在调整窗口大小和网格大小时,如果使用ActualWidth,则该值不会更改,我留下的值不再准确

     private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
         Rectangle rett = new Rectangle();
        rett.Height = grid1.ActualHeight-10;
        rett.Width = grid1.ActualWidth -10;
        rett.Fill = new SolidColorBrush(Colors.LightBlue);
        canv.Children.Add(rett);
        Canvas.SetLeft(rett, 10);
        Canvas.SetTop(rett, 10);
    }
这是xaml:

<Grid x:Name="grid1">
        <Canvas x:Name="canv" Height="auto" Width="auto"></Canvas>
</Grid>

在第一张图片中,不调整窗口大小是可以的

第二次调整网格大小时,仍保持先前的宽度

我希望矩形的宽度在更改网格宽度时得到更新。 谢谢。

如果没有这一点,你就不可能清楚地说明你的问题,并详细解释你实际上想要实现的目标(特别是在更广泛的意义上),那么就不可能确定你的情况下最好的答案是什么

从字面上理解您的问题,一种可能的方法似乎是将
矩形
维度绑定到
网格
的维度,以便它们随着
网格
大小的变化而更新。您可以使用
IValueConverter
从实际尺寸中减去适当的量

但对于一个相当简单的问题来说,这是一个相当复杂的解决方案,尤其是考虑到您似乎出于某种原因在代码隐藏中这样做(一开始并不理想,在代码隐藏中设置绑定特别乏味)

按照习惯,您应该做的可能不是将
矩形
放在
画布
中,而是直接将其作为
网格
的子对象。然后,您可以将其对齐设置为“拉伸”(Stretch),以便填充其所在的网格单元。最后,您可以设置其边距,以便在顶部和左侧有10个像素的间隙,而在右侧和底部没有间隙

例如:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    Rectangle rett = new Rectangle();
    rett.Fill = new SolidColorBrush(Colors.LightBlue);

    // NOTE: technically don't need to set these, as Stretch is the default value!
    rett.HorizontalAlignment = HorizontalAlignment.Stretch;
    rett.VerticalAlignment = VerticalAlignment .Stretch;

    // 10 pixels of margin on top and left, none on right and bottom
    rett.Margin = new Thickness(10, 10, 0, 0);

    grid1.Children.Add(rett);
}
如上所述,XAML布局引擎可以自动处理您正在寻找的调整大小行为

综上所述,我肯定会鼓励您在XAML中实现这一点,而不是代码隐藏。代码隐藏有很多优点,但坦率地说,XAML在与GUI对象图的配置直接相关的任何方面都要好得多。

如果没有这些,可以清楚地说明您的问题,并详细解释您实际要完成的任务(特别是在更广泛的意义上),不可能确切知道你的情况下最好的答案是什么

从字面上理解您的问题,一种可能的方法似乎是将
矩形
维度绑定到
网格
的维度,以便它们随着
网格
大小的变化而更新。您可以使用
IValueConverter
从实际尺寸中减去适当的量

但对于一个相当简单的问题来说,这是一个相当复杂的解决方案,尤其是考虑到您似乎出于某种原因在代码隐藏中这样做(一开始并不理想,在代码隐藏中设置绑定特别乏味)

按照习惯,您应该做的可能不是将
矩形
放在
画布
中,而是直接将其作为
网格
的子对象。然后,您可以将其对齐设置为“拉伸”(Stretch),以便填充其所在的网格单元。最后,您可以设置其边距,以便在顶部和左侧有10个像素的间隙,而在右侧和底部没有间隙

例如:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    Rectangle rett = new Rectangle();
    rett.Fill = new SolidColorBrush(Colors.LightBlue);

    // NOTE: technically don't need to set these, as Stretch is the default value!
    rett.HorizontalAlignment = HorizontalAlignment.Stretch;
    rett.VerticalAlignment = VerticalAlignment .Stretch;

    // 10 pixels of margin on top and left, none on right and bottom
    rett.Margin = new Thickness(10, 10, 0, 0);

    grid1.Children.Add(rett);
}
如上所述,XAML布局引擎可以自动处理您正在寻找的调整大小行为

综上所述,我肯定会鼓励您在XAML中实现这一点,而不是代码隐藏。代码隐藏在很多方面都很擅长,但坦率地说,XAML在与GUI对象图的配置直接相关的任何方面都要好得多