Я получаю это в своем окне вывода:
Система. Windows. Ошибка данных: 4: не Может найти источник для привязки со ссылочным 'RelativeSource FindAncestor, AncestorType ='System. Windows. Средства управления. ItemsControl', AncestorLevel = '1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; целевым элементом является 'ListBoxItem' (Имя = ''); целевым свойством является 'VerticalContentAlignment' (введите 'VerticalAlignment'),
Это - мой XAML, который, когда выполненные взгляды исправляют
<GroupBox Header="Grant/Deny Report">
<ListBox ItemsSource="{Binding Converter={StaticResource MethodBinder}, ConverterParameter=GrantDeny, Mode=OneWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Entity}"/>
<Label Content="{Binding HasPermission}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</GroupBox>
Я также собирался порекомендовать статью Bea Stollnitz , но Джонатан Аллен получил свой пост, пока я его еще печатал. Я также рекомендую ссылки в этой записи блога .
В этом конкретном случае вы можете видеть, что где-то ListBoxItem имеет привязку FindAncestor к ItemsControl, которая дает сбой. Это сразу говорит вам о том, что где-то есть ListBoxItem, который либо:
Кроме того, вы знаете, что кто-то где-то , связывает свойство ListBoxItem VerticalContentAlignment с FindAncestor.
Глядя на системные темы (поставляемые с Expression Blend, а также доступные через надстройку NET Reflector BAMLViewer), мы видим следующее:
<Style x:Key="{x:Type ListBoxItem}">
<Setter Property="VerticalContentAlignment"
Value="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}" />
Это объясняет, откуда берется привязка. Следующий вопрос: как создается ListBoxItem, который не находится в ListBox (или другом ItemsControl)?
Некоторые вещи, на которые следует обратить внимание:
Надеюсь, это направит вас в правильном направлении.