C# 更改网格宽度时更新矩形的宽度
您好,我有以下问题:我想用canvas.SetLeft()和canvas.SetTop()方法在画布上绘制一个矩形 我使用UserControl_load()方法,一切正常。 问题是,在调整窗口大小和网格大小时,如果使用ActualWidth,则该值不会更改,我留下的值不再准确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
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对象图的配置直接相关的任何方面都要好得多