Вопрос

Следующее Пример кода Майкрософт содержит следующее:

<Grid>
...     
  <Border Name="Content" ... >
...     
  </Border>
</Grid>
<ControlTemplate.Triggers>
  <Trigger Property="IsExpanded" Value="True">
     <Setter TargetName="ContentRow" Property="Height"
             Value="{Binding ElementName=Content,Path=DesiredHeight}" />
  </Trigger>
...
</ControlTemplate.Triggers>

Однако при запуске этот код генерирует следующую ошибку привязки данных:

System.Windows.Data Error: 39 : BindingExpression path error: 'DesiredHeight' property not found on 'object' ''Border' (Name='Content')'. BindingExpression:Path=DesiredHeight; DataItem='Border' (Name='Content'); target element is 'RowDefinition' (HashCode=2034711); target property is 'Height' (type 'GridLength')

Несмотря на эту ошибку, код работает корректно.Я просмотрел документацию и DesiredHeight похоже, не является членом Border.Кто-нибудь может объяснить, где DesiredHeight исходит откуда?Кроме того, есть ли способ устранить/подавить эту ошибку, чтобы вывод моей программы был чистым?

Это было полезно?

Решение

Вы можете увидеть это свойство в части кода вашего приложения.

Редактировать:

Border content = new Border();
int desiredHeight = content.DesiredSize.Height;
int desiredWidth = content.DesiredSize.Width;

Чтобы решить эту проблему, попробуйте привязать его к атрибуту Height, поскольку DesiredHeight, похоже, недоступен в разметке XAML элемента управления Border.

Другие советы

Я столкнулся с этим.В соответствии с тем, что сказал пользователь275587, их пример работает, потому что триггер удаляет Heigth="0" в RowDefination.

Поэтому я переключаю настройку высоты/логику триггера, поэтому в RowDefination не установлена ​​высота.

<Grid.RowDefinitions>
     <RowDefinition Height="Auto"/>
     <RowDefinition Name="ContentRow" />
</Grid.RowDefinitions>
...
<ControlTemplate.Triggers>
     <Trigger Property="IsExpanded" Value="False">
             <Setter TargetName="ContentRow" Property="Height" Value="0" />
     </Trigger>
</ControlTemplate.Triggers>

Попробуй это.

<Setter
    TargetName="content"
    Property="Height"
    Value="{Binding ElementName=content, Path=DesiredHeight}"
/>
    ↓
<Setter TargetName="content" Property="Height" Value="NaN"/>

Привязка необязательна.

Я столкнулся с той же проблемой в своем заявлении.В конце концов я изменил код так, чтобы переключать видимость контента между Collapsed и Visible, и заменил Grid с StackPanel.

В целом я нашел качество образцов шаблонов управления MS довольно хорошим, но ошибка с этим немного расстраивала.

Та же проблема, но принятое решение Карло работает не идеально.Проблема, с которой столкнулся постер, исчезла, но экспандер частично сломался.

если у вас есть некоторый контент, который необходимо расширить в уже расширенном расширителе, это не будет сделано с помощью привязки к Желаемый размер.Высота, тебе нужно Желаемая высота - может быть по причине, указанной пользователем 275587.

Была такая же проблема.Использовал кастомный Expander в обычае ComboBox.Ничто из вышеперечисленного не помогло мне, привязка к Height сломал функциональность Expander, используя StackPanel также сломалось отображение элементов в каждой группе.Я нашел:

<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>

DesiredHeight берется из элемента содержимого и является допустимой привязкой.Я думаю, что причина, по которой ваша привязка не разрешается, заключается в том, что DesiredHeight опирается на свойство Height, и вы не установили фиксированную высоту в своем шаблоне, поэтому она оценивается как Double.Nan.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top