IValueConverter рассчитать новый размер для TextBlock - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать IValueConverter для вычисления новой ширины для TextBlock в зависимости от ширины в сетке.Но я всегда получаю это исключение:

Необработанное исключение типа «System.Windows.Markup.XamlParseException» возникало в PresentationFramework.dll Дополнительная информация: «Укажите значение» 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();
    }
}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Проверьте, объявили ли вы Window.Resources перед первым использованием в XAML, чтобы он был известен.Кроме того, сборка приложения один раз после добавления ресурса перед его использованием иногда помогает исправить ошибки сборки

Вы также не должны привязываться к элементу Width, но всегда к его ActualWidth.Ширина инициализируется на NaN и здесь не будет работать.

0 голосов
/ 30 января 2019

Вам необходимо привязать свойство ActualWidth CalBackGround, а не Width.

...