WPF转换器奇怪的行为

时间:2012-05-10 17:38:35

标签: wpf binding converter actualwidth

我将Width的{​​{1}}绑定到其TextBox的{​​{1}},如下所示:

ActualWidth

如图所示,我正在使用转换器,如下所示:

Grid

奇怪的是,显示的代码运行正常。但是,如果我用<TextBlock Grid.Column="0" Text="WorkPortalView UserControl" TextTrimming="CharacterEllipsis" Foreground="White" Margin="5" Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Converter={StaticResource textWidthConverter}, diag:PresentationTraceSources.TraceLevel=High}" /> 替换class TextWidthConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double? d = value as double?; if (d == null) return null; return (d / 2); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotSupportedException("Cannot convert back"); } } 语句,它似乎会引发无限循环的属性更改。

以下是d / 2的诊断跟踪标记的输出:

return (d / 2)

以下是d - 75D的诊断跟踪标记的输出:

return (d - 75D)

有关什么解释转换器的这种行为的想法?

2 个答案:

答案 0 :(得分:1)

显然,网格需要更多文本空间。您可能能够在d-87D找到此行为的截止点,因为网格似乎需要在每个文本块宽度更改时额外增加12 px。

顺便说一下,如果你想要的只是给文本块一个相对大小,那么对网格列使用star sizing可能会更好。

答案 1 :(得分:0)

这似乎是一个错误。对于一次“自动调整”迭代,该行为是合理的,但不应导致无限循环。请参阅上面的讨论。

我最终切换到DockPanel以达到所需的布局。