Я пытаюсь использовать IValueConverter для вычисления новой ширины TextBlock в зависимости от ширины сетки. Но я всегда получаю это исключение:
В PresentationFramework.dll возникло необработанное исключение типа «System.Windows.Markup.XamlParseException». Дополнительная информация: «Предоставление значения для« System.Windows.Markup.StaticResourceHolder »вызвало исключение». Номер строки «264» и позиция строки «76».
Я сократил CalMeetingSize до всего, но все равно получаю сообщение об ошибке. Итак, я предполагаю, что делаю что-то не так в xaml? Может ли кто-нибудь дать мне подсказку?
<Grid x:Name = "CalBackGround" Margin = "163,30,0,0">
...
<TextBlock Height = "18" Text = "{Binding subject}"
Width = "{Binding Path=Width,
ElementName=CalBackGround,
Converter = {StaticResource CalMeetingSizeKey}}"
/>
...
<Window.Resources>
<local:CalMeetingSize x:Key = "CalMeetingSizeKey"/>
</Window.Resources>
...
public class CalMeetingSize : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return 200;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Вы фрагменты в том же порядке, что и в вашем xaml? Если да, вы используете свой ресурс до того, как он определен. Лучше всего всегда ставить <Window.Resources> первым потомком <Window>.
Вопрос в том, почему вы вообще хотите это сделать. Разве TextBlock не является дочерним элементом сетки, размер которого можно изменить с помощью обычного макета?





Вам необходимо выполнить привязку к свойству CalBackGround ActualWidth, а не к Width.
Проверьте, объявили ли вы Window.Resources перед первым использованием в XAML, чтобы он был известен. Также соберите приложение один раз после добавления ресурса перед его использованием, иногда это помогает исправить ошибки сборки.
Вы также не должны привязываться к Width элемента, но всегда к его ActualWidth. Ширина инициализирована до NaN и здесь не работает.
XAML неверен, так как он привязывается к ширине сетки, которая не задана и, следовательно, имеет значение по умолчанию NaN.
Не могли бы вы опубликовать
Inner Exception?