Я пытаюсь создать собственный шаблон / стиль TabItem в своем приложении WPF 4.0 (используя VS 2010 Pro RTM), но, несмотря на все, что кажется, работает правильно, я замечаю ошибку привязки в окне трассировки.
Словарь ресурсов XAML, который я использую для стилизации TabItems TabControl, дан полностью здесь .(Просто создайте простой TabControl с несколькими элементами и примените данный ResourceDictionary для его проверки.)
В частности, ошибка возникает из-за следующей строки (обнаруженной путем пробного тестирования и ошибок, так как Visual Studio не 't фактически сообщает об этом во время разработки.
<TranslateTransform X="{Binding ActualWidth, ElementName=leftSideBorderPath}"/>
Полная ошибка, приведенная в трассировке (окно выхода), следующая:
System.Windows.Data Ошибка: 2: Не удается найти управляющуюFrameworkElement или FrameworkContentElement для целевого элемента. BindingExpression: Path = ActualWidth; DataItem = null; целевым элементом является TranslateTransform (HashCode = 35345840); целевым свойством является 'X' (тип 'Double')
Произошла ошибкапри загрузке и затем повторяется 5 раз (обратите внимание, что у меня есть 3 элемента табуляции в моем примере). Это также происходит последовательно и многократно при изменении размера окна, например, при заполнении окна «Вывод». Возможно, каждый раз при обновлении макета TabItem?
И снова, хотя это не сообщается, ошибка vПохоже, что во многом это связано с тем, что я вообще привязан к любому элементу, а не к leftSideBorderPath или свойству ActualWidth.Например, изменение этой строки следующим образом исправляет:
<TranslateTransform X="25"/>
К сожалению, жесткое кодирование значения на самом деле не вариант.
Эта проблема мне кажется очень странной в этомпривязка, кажется, дает правильные результаты.(Проверка значения X для TranslateTransform во время выполнения четко показывает правильное значение привязки, и ClipGeometry при просмотре - это именно то, что и должно быть.) Кажется, ни Visual Studio, ни WPF не дают мне никакой дополнительной информации о причине ошибки.(установка PresentationTraceSources.TraceLevel в High не помогает), но тот факт, что все работает, несмотря на сообщаемую ошибку, заставляет меня думать, что это какая-то баговая ошибка WPF.
В качестве примечания,дизайнер Visual Studio WPF и редактор XAML вызывают у меня проблему со следующей строкой:
<PathGeometry Figures="{Binding Source={StaticResource TabSideFillFigures}}"/>
Хотя WPF (во время выполнения) идеально подходит для привязки рисунков к строке TabSideFillFigures, причем привязка заставляет использоватьTypeConverter, редактор XAML и дизайнер WPF жалуются.Весь код XAML для ControlTemplate подчеркнут, и я получаю следующие ошибки в списке ошибок:
Ошибка 9
'{DependencyProperty.UnsetValue}' не является допустимым значением для 'System.Windows.Controls.Control.Template 'свойство в Setter.
C: \ Users \ Alex \ Documents \ Visual Studio 2010 \ Projects \ Ircsil \ devel \ Ircsil \ MainWindow.xaml 1 1 Ircsil
Ошибка 10 Ссылка на объект не установлена для экземпляра объекта.
C: \ Users \ Alex \ Documents \ Visual Studio 2010 \ Projects \ Ircsil \ devel \ Ircsil \ Skins \ Default \ MainSkin.xaml 58 17 Ircsil
Опять же, повторюсь, все прекрасно работает во время выполнения, что делает это особенно странным ...
Может кто-то, возможно, пролить некоторый свет на эти проблемы, в частности первый (которыйкажется потенциальной ошибкой WPF), и последняя (которая, похоже, ошибка Visual Studio).Буду признателен за любые отзывы и предложения!
Редактировать:
Я загрузил полное решение (это довольно небольшой проект) на свой сервер в виде ZIP-файла .Вы должны сразу увидеть ошибки и готовы к тестированию.