我将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)
有关什么解释转换器的这种行为的想法?
答案 0 :(得分:1)
显然,网格需要更多文本空间。您可能能够在d-87D找到此行为的截止点,因为网格似乎需要在每个文本块宽度更改时额外增加12 px。
顺便说一下,如果你想要的只是给文本块一个相对大小,那么对网格列使用star sizing可能会更好。
答案 1 :(得分:0)
这似乎是一个错误。对于一次“自动调整”迭代,该行为是合理的,但不应导致无限循环。请参阅上面的讨论。
我最终切换到DockPanel
以达到所需的布局。