4

我有一个数据网格,其中有一些列,我已经修改了它们的字符串格式,比如这个,它接受一个 UINT32 数字并输出它的十六进制格式。

<WpfToolkit:DataGridTextColumn Binding="{Binding Path=getStart, Mode=OneWay, StringFormat='{}{0:x4}'}" Header="Starting Address"  Width="13*"/>

但是,当我复制一行时,我会再次获得 UINT 编号而不是十六进制,这正是我所希望的。有没有办法保留字符串格式?我已经查看了 CopyingRowClipboardContent,但我不太确定如何正确使用此事件处理程序。有什么帮助吗?

4

1 回答 1

1

你可以尝试做这样的事情:

1)将属性getStartS类型的字符串添加到您的类中,在getter中您可以格式化您的字符串。

 public class Foo
    {
        public int getStart { get; set; }

        public string getStartS { get { return string.Format("{0:x4}", getStart); } }
    }

2)在 DataGrid 列中,您可以绑定到 getStartS 属性,它会正常工作!

<DataGridTextColumn Binding="{Binding Path=getStartS}" 
                                    Header="Starting Address"                                    
                                    />

或者您可以尝试第二种解决方案:

数据网格列:

<DataGridTextColumn Binding="{Binding Path=getStart, Mode=OneWay, StringFormat='{}{0:x4}'}" 
                                    Header="Starting Address"
                                    CopyingCellClipboardContent="DataGridTextColumn_CopyingCellClipboardContent"
                                    />

事件处理程序:

 private void DataGridTextColumn_CopyingCellClipboardContent(object sender, DataGridCellClipboardEventArgs e)
        {
            if (e.Column.ClipboardContentBinding != null && !string.IsNullOrEmpty(e.Column.ClipboardContentBinding.StringFormat))
            {
                e.Content = string.Format(e.Column.ClipboardContentBinding.StringFormat, e.Content);
            }
        }
于 2012-08-03T17:51:10.320 回答