WPF_Listview中的一个让人哭笑不得的BUG.
发现一个wpf中listview.gridview的一个BUG。查资料,说是在sp1中已经修正,装上SP1,结果又发现一个新BUG。
我的命怎么这么苦哇。
这个BUG让人哭笑不得。
Text="{Binding Path=Close, StringFormat=_{0:f}}" 正常
Text="{Binding Path=Close, StringFormat={0:f}}" 编译不过
因为要显示表格,所以使用了ListView中的GridView视图.开始是直接写xaml代码,因为要保留2位小数,所以用了stringformat属性.结果就出现上面的问题.直接用{0:f},编译不过.在前面随便加些字符却能正常编译和使用了.
没办法,只好改用代码来写.
GridViewColumn gcv_close = new GridViewColumn();
gcv_close.Header = "现价";
Binding bd_close = new Binding("Close");
bd_close.StringFormat = "f";
gcv_close.DisplayMemberBinding = bd_close;
gv.Columns.Add(gcv_close);
运行正常.搞定.结果正常.没想到苦难才刚刚开始.因为是列表显示的数据,所以为了用户体验,要求数字列右对齐.于是按微软官方作法,使用自定义模板,
<DataTemplate x:Key="template_close">
<TextBlock HorizontalAlignment="Right" Text="{Binding Path=Close,StringFormat={0:f}" />
</DataTemplate>
这里问题来了.如果使用xaml代码来写自定义模板.那么StringFormat这里就没办法正常编译通过.于是再次决定用代码来写模板.但是才写了几句却发现,原来微软已经废弃了使用代码书写模板的作法.也就是说现在不允许用代码来直接写模板了,查官方资料,官方建议一般情况下使用xaml书写模板,如果需要用代码的话,可以直接用xamlreader来读取xaml字符串生成模板.这两个办法都试过,都不行.
现在只有一个笨办法,把数据源中的对应值改为string类型,在数据源中直接就存储为{f}样式的字符串.但是用这个办法,真的感觉很雷..
新东西好是好,就是Bug太多.赶快出sp2吧.
另外如果有哪位高人能够帮忙解决一下我的问题,不胜感激.