c#wpf TextBlock有时不显示计算值
我创建了一个自定义控件,它基本上显示数据网格(teleriks RadDataGrid)中显示的行数 我可以这样使用它: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
<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
,显示在UI中:“11”
1
评估值:TextBlock.Text
,显示在UI中:“325”
3
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}" />