Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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#_Wpf_Xaml_Grid - Fatal编程技术网

C# 是否以编程方式获取当前列宽和高度?

C# 是否以编程方式获取当前列宽和高度?,c#,wpf,xaml,grid,C#,Wpf,Xaml,Grid,我试图以编程方式在UserControl中获取网格的宽度和高度 这是我的XAML网格: <Grid Name="BallGrid" Background="DarkBlue" Height="auto" Width="auto"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.

我试图以编程方式在UserControl中获取网格的宽度和高度

这是我的
XAML
网格:

<Grid Name="BallGrid" Background="DarkBlue" Height="auto" Width="auto">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
</Grid>
返回0

这些呢

double width = BallGrid.ColumnDefinitions[0].Width.Value;
double height = BallGrid.RowDefinitions[0].Height.Value;
返回两个返回1

我想知道实际宽度,最好是与页边尺寸相同的单位。如何以编程方式获取这些值


列值在ProgesChanged方法中查询,BackgroundWorker每50毫秒调用一次,这可能会有所不同。

请尝试
BallGrid.RenderSize.Height
BallGrid.RenderSize.Width

在源代码初始化后,它们是有效的。您可以在SourceInitialized上重写
,以了解这是何时发生的。

通常使用
实际宽度
/
高度
,这里的这些属性有点懒惰:

添加或删除行或列时,所有元素的“for all element”和所有元素的实际高度将变为零,直到调用为止


因此,您可能可以手动调用
Measure
,或者尝试等待它。

是否在呈现控件后查询这些属性?它们是从ProgressChanged方法调用的,我不知道它是否已呈现,可能不是从外观上看……这可能意味着您的网格尚未呈现。如果您仍然需要大小,则可以尝试
BallGrid.DesiredSize.Height
BallGrid.DesiredSize.Width
,但这可能不是渲染的大小。在哪里可以找到OnSourceInitialized方法?OnInitialized给出了相同的结果。我先尝试了OnInitialized,但对我无效。键入“override”(override加空格),Intellisense将提示您输入要重写的方法,选择它,Intellisense将添加整个方法、主体和基调用。一定要爱智能感知!没有OnSourceInitialized,或者至少我的intellisense找不到它。@ProgrammerAtWork这将是Window类上的一个方法,它是“源”的源。啊,我在一个用户控件中>\u>
double width = BallGrid.ColumnDefinitions[0].Width.Value;
double height = BallGrid.RowDefinitions[0].Height.Value;