2010-03-10 2 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 до тех пор, пока сетка не будет измерена, чтобы это могло быть одним объяснением. В отличие от FrameworkElement, который определяет ActualHeight как свойство зависимостей, RowDefinition происходит не от FrameworkElement и просто определяет ActualHeight как обычное свойство без события изменения.

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

+0

Я не заметил, что это не зависимость. Гектометр Хорошо, я буду продолжать искать, но я думаю, что вы, вероятно, правы в том, что нужно делать это в коде. – moswald

+0

@mos, Любая удача? – Josh

+2

В итоге я положил панель внутри этой строки, назвав ее, а затем привязав ее к своей высоте. Я получаю привязки ошибок трассировки при запуске, но после того, как окно полностью создано, все, кажется, работает нормально. Если я смогу выяснить, как удалить эти ошибки, я отправлю свое решение здесь. – moswald

Смежные вопросы