C# 是否以编程方式获取当前列宽和高度?
我试图以编程方式在UserControl中获取网格的宽度和高度 这是我的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.
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;