c#wpf TextBlock有时不显示计算值

c#wpf TextBlock有时不显示计算值,c#,wpf,C#,Wpf,我创建了一个自定义控件,它基本上显示数据网格(teleriks RadDataGrid)中显示的行数 我可以这样使用它: <utility:GridFooter Grid.Row="2" SourceGrid="{Binding ElementName=GrdResult}" /> 这是转换器: [ValueConversion(typeof(int), typeof(string))] public class IntToFormatStringConverter : IValu

我创建了一个自定义控件,它基本上显示数据网格(teleriks RadDataGrid)中显示的行数

我可以这样使用它:

<utility:GridFooter Grid.Row="2" SourceGrid="{Binding ElementName=GrdResult}" />
这是转换器:

[ValueConversion(typeof(int), typeof(string))]
public class IntToFormatStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return "0";
        var i = (int) value;

        var format = parameter as string;
        if (format == null)
            return i.ToString(culture);

        // I have set a breakpoint here, and the value is alaways 
        // correct, even if its not what is beeing displayed
        // So, It's not the Converter
        var ret = i.ToString(format, culture);
        return ret;

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
因此,我更进一步,用VS2015 Live Visual树查找
TextBlock
。在Live属性资源管理器中,
文本
-属性具有BindingExpression。展开
文本
-属性后,计算值将正确显示

我将举几个例子

  • TextBlock.Text
    评估值:
    “11”
    ,显示在UI中:
    1
  • TextBlock.Text
    评估值:
    “325”
    ,显示在UI中:
    3
在错误情况下,似乎只显示计算值的第一个字符。也就是说:评估值aka<代码>网格.项目.计数正确。因此,我看到列表中的
325
项,
TextBox.Text的评估值是
“325”
,显示为
3

上述行为只是偶尔发生。我在多个地方使用
GridFooter
,没有问题,但也没有显著差异

如果有人知道这个问题或有任何可能的解决办法,请让我知道

编辑: 我注意到,重新绘制后,值显示正确。例如,如果控件中使用了
GridFooter
,使其能够放置和停靠,只需稍微移动它就会导致重绘并立即显示缺失的数字


我还找到了解决方法,将
Width=“Auto”
更改为像
Width=“60”
这样的固定值将停止该错误。然而,我仍然想知道,是什么导致了错误的绘图

这看起来可能是一个剪辑问题(即文本框没有填满所有可用空间,因此只显示第一个字符),请尝试以下操作:

<TextBlock HorizontalAlignment="Stretch" Text="{Binding Path=SourceGrid.Items.Count, RelativeSource={RelativeSource TemplatedParent}, 
                            Converter={StaticResource IntToFormatStringConverter}, ConverterParameter=N0}" />


关键部分是
HorizontalAlignment=“Stretch”
属性。

我明天会尝试,但看起来很奇怪,控件可以显示20000之类的内容。@LuckyLikey可能会尝试从
调用中删除区域性参数。也可以尝试将字符串(格式、区域性)
调用中的区域性参数删除。这可能会引起一些奇怪的问题。嘿,我试过你的方法。我可以说这绝对不是一个剪辑问题,因为opon绑定重载,每个值都可以显示。正如问题中所解释的,我已经验证了
.ToString(格式、区域性)
的结果是正确的。否则,绑定的计算值也可能不正确。所以所发生的一切,似乎都是一个文本块错误。
<TextBlock HorizontalAlignment="Stretch" Text="{Binding Path=SourceGrid.Items.Count, RelativeSource={RelativeSource TemplatedParent}, 
                            Converter={StaticResource IntToFormatStringConverter}, ConverterParameter=N0}" />