2012-08-30 55 views
2

我試圖以編程方式獲取網格的寬度和高度,在UserControl中。以編程方式獲取當前列寬和高度?

這裏是我的XAML格:

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

但是這兩種:

double width = BallGrid.ColumnDefinitions[0].ActualWidth; 
double height = BallGrid.RowDefinitions[0].ActualHeight; 

返回0,

這些

double width = BallGrid.ColumnDefinitions[0].Width.Value; 
double height = BallGrid.RowDefinitions[0].Height.Value; 

收益都返回1。

我想知道實際寬度,最好以與邊距尺寸相同的單位。我如何以編程方式獲取這些值?

在ProgessChanged方法中查詢列值,該方法每50毫秒由BackgroundWorker調用一次,這可能會有所不同。

+0

是否在控件提交後查詢這些屬性? – Dennis

+0

他們從ProgressChanged方法調用,我不知道它是否已被渲染,可能不是由外觀的東西... – ProgrammerAtWork

回答

4

通常你用ActualWidth/Height,這裏的屬性是有點懶:

當您添加或刪除的行或列中,ActualWidth所有ColumnDefinition元素和的ActualHeight所有RowDefinition元素變直到調用Measure爲止。

因此,您可以手動撥打Measure或嘗試等待它。

0

嘗試BallGrid.RenderSize.HeightBallGrid.RenderSize.Width

+0

兩者仍然返回0. – ProgrammerAtWork

+0

那麼這可能意味着你的網格還沒有渲染。如果你仍然想要大小,那麼你可以嘗試'BallGrid.DesiredSize.Height'和'BallGrid.DesiredSize.Width',但這可能不是它所呈現的大小。 –

1

它們是有效的來源已經初始化之後。您可以覆蓋OnSourceInitialized以瞭解何時發生。

+0

我在哪裏可以找到OnSourceInitialized方法? OnInitalized給出了相同的結果。 – ProgrammerAtWork

+0

我試過OnInitialized第一次,它沒有爲我工作。鍵入'覆蓋'(覆蓋加空格),智能感知會提示你想要覆蓋的方法,選擇它並且智能感知將添加整個方法,主體和基地調用。得愛Intellisense! – Tergiver

+0

沒有OnSourceInitialised,或者至少,我的智能感知沒有找到它。 – ProgrammerAtWork

相關問題