Привязка к ColumnDefinition.ActualWidth возвращает 0
Вставьте это в сидр.
<Grid x:Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="ColumnDefinition"/>
</Grid.ColumnDefinitions>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="{Binding ActualWidth, ElementName=Grid}"/>
<TextBlock Text="{Binding ActualWidth, ElementName=ColumnDefinition}"/>
</StackPanel>
</Grid>
Теперь запустите его. Второй TextBlock
показывает 0, но не должен, верно? Обходной путь?
3 ответа
Нет, ты не сделал. ColumnDefinition имеет ActualWidth
собственно, собственно. Но это ни DependencyProperty
ни там INotifyPropertyChanged
реализация. Так что никто не сообщит вашей цели, когда ActualWidth
обновляется.
Обходной путь? Для чего? Вы всегда можете использовать ElementName
привязка к родителю FrameworkElement
у кого именно это ActualWidth
что ты хотел. Извините за сложную фразу:). Не мог сделать это проще.
Надеюсь это поможет.
ColumnDefinition.ActualWidth
Свойство не является свойством зависимости, и ваша привязка покажет только его начальное значение, равное 0, прежде чем сетка будет обновлена для макета. Grid.ActualWidth
свойство с другой стороны является свойством зависимости, и привязка будет обновляться при изменении ширины.
Со страницы MSDN:
Когда вы добавляете или удаляете строки или столбцы, ActualWidth для всех элементов ColumnDefinition и ActualHeight всех элементов RowDefinition становятся равными нулю, пока не будет вызвана Measure.
Казалось бы, значение привязано перед Measure
как-то называется. Попробуй заставить Mode = OneWay
на вашу привязку, а также проверку вручную в коде, чтобы подтвердить это поведение.