IValueConverter 计算 TextBlock 的新大小

IValueConverter calculate new size for TextBlock

我正在尝试使用 IValueConverter 根据 Grid 上的宽度计算 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();
    }
}

您需要绑定到 CalBackGround 的 ActualWidth 属性,而不是 Width

检查您是否在 XAML 中首次使用之前声明了 Window.Resources 以便知道。 在添加资源之后再构建一次应用程序,然后再使用它有时有助于修复构建错误

您也不得绑定到元素的 Width,但始终绑定到其 ActualWidth。宽度初始化为 NaN,此处不起作用。