2010-03-10 31 views
3

在這個示例代碼中,我試圖通過其中一行的高度來抵消GridCanvas位置。有沒有人看到我可能做錯了什麼?正如你所看到的,我試圖在xaml文件中移動較低的綁定,以防需要首先定義RowDefinitions。無論哪種方式,它似乎並不重要,因爲Canvas.Top始終爲0如何綁定到RowDefinition的高度?

<Canvas> 
    <Grid Canvas.Top="{Binding ElementName=DetailsRow, Path=ActualHeight}"> 
     <Grid.RowDefinitions> 
     <RowDefinition x:Name="NameRow" /> 
     <RowDefinition x:Name="DetailsRow" /> 
     </Grid.RowDefinitions> 
     <Button Grid.Row="0">Button</Button> 
     <Button Grid.Row="1">Button</Button> 

     <!-- I expected this to maybe work, but no dice 
     <Canvas.Top> 
     <Binding ElementName="DetailsRow" Path="ActualHeight" /> 
     </Canvas.Top> 
     --> 

    </Grid> 
</Canvas> 

回答

8

ActualHeight不是依賴屬性,因此它可能不是觸發任何形式的變更通知。 ActualHeight實際上從0開始,直到電網被測量爲止,這可能是一種解釋。與確定ActualHeight作爲依賴項屬性的FrameworkElement不同,RowDefinition不是從FrameworkElement派生而是僅將ActualHeight定義爲沒有更改事件的普通屬性。

我已經考慮過應該有一個BindingMode.Polling選項,綁定系統會在特定的時間間隔輪詢源屬性。但不幸的是,你可能只是被困在代碼中。

+0

我沒有注意到它不是一個依賴屬性。嗯。好的,我會繼續尋找,但我認爲你可能需要在代碼中完成。 – moswald 2010-03-10 15:41:18

+0

@mos,還好嗎? – Josh 2010-03-18 06:08:24

+2

我最後把面板放在那一行內,命名它,然後綁定它的高度。我在啓動時遇到綁定跟蹤錯誤,但在窗口完全創建後,一切似乎都可以正常工作。如果我能弄清楚如何刪除這些錯誤,我會在這裏發佈我的解決方案。 – moswald 2010-03-19 15:32:44

相關問題