Как связать с высотой RowDefinition? - PullRequest
3 голосов
/ 10 марта 2010

В этом примере кода я пытаюсь сместить позицию Grid Canvas на высоту одной из ее строк. Кто-нибудь видит, что я могу делать не так? Как видите, я попытался переместить привязку ниже в файле xaml, на случай, если сначала нужно определить RowDefinitions. В любом случае, это не имеет значения, потому что Canvas.Top всегда равно 0.

<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>

1 Ответ

9 голосов
/ 10 марта 2010

ActualHeight не является свойством зависимости, поэтому, вероятно, не вызывает никаких уведомлений об изменениях. ActualHeight фактически начинается с 0, пока сетка не будет измерена, так что это может быть одним объяснением. В отличие от FrameworkElement, который определяет ActualHeight как свойство зависимости, RowDefinition не является производным от FrameworkElement и просто определяет ActualHeight как обычное свойство без события изменения.

Я на самом деле думал о том, что должна быть опция BindingMode.Polling, где система привязки будет опрашивать свойство источника через определенные промежутки времени. Но, к сожалению, вы просто застряли, делая это в коде.

...