我正在使用WPF工具包Datagrid在我正在工作的应用程序之一。我想要的是将列宽和displayindex存储为用户首选项。我为列displayindex已达到它,但对于resize我无法找到任何事件的数据网格,这将触发后列大小更改。 我已经尝试过“SizeChanged”事件,我猜想它只是在最初计算大小时触发的,并且也是针对整个数据网格而不是针对各个列。
任何替代解决方案或者是否有人知道该事件?WPF工具包DataGrid列调整大小事件
回答
您可以尝试延长DataGrid
然后执行NotifyPropertyChange
事件。就像这样:
class MyDataGrid : DataGrid, INotifyPropertyChanged
{
private DataGridLength _columnWidth;
public DataGridLength ColumnWidth
{
get { return _columnWidth; }
set
{
_columnWidth = value;
NotifyPropertyChanged("ColumnWidth");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
从那里,你可以添加一个delagate处理程序来做你想做的任何事情。喜欢的东西:
MyDataGrid dataGrid;
//init grid, do stuff
dataGrid.PropertyChanged += new PropertyChangedEventHandler(ColumnWidthChanged);
//ColumnWidthChanged will be a method you define
现在,你有delagate,你可以定义你想要什么样的结果列的宽度改变:
private void ColumnWidthChanged(object sender, PropertyChangedEventArgs args)
{
if(args.PropertyName.Equals("ColumnWidth"))
{
//Do stuff now that the width is changed
}
}
你会注意到,我检查其财产被改变了。我设置它的方式是可以扩展其他属性并为其更改制作处理程序。如果你想要多一个处理程序,那么最好使用一个DataGridPropertyChanged
方法来打开哪些属性被更改。然后它会为每个被更改的属性调用适当的方法(如ColumnWidthChanged
)。这样,你不必检查每个处理程序只修改一个属性。
您没有指定一种语言,所以我将其重新标记为C#。但是,如果这是你正在使用的,它应该很简单,转移到VB。
希望这会有所帮助!
我假设你想要保存列的宽度,以便在下一次应用程序启动时使用相同的列宽来生成数据网格。
如果是这种情况,则另一种方法是在应用程序关闭时保存列宽(和索引),这比每次调整列大小时保存宽度更有效。
根据您的应用程序是如何构成的,这样的事情应该工作...
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
foreach (DataGridColumn column in dataGrid1.Columns)
{
// save the column.Width property to a user setting/file/registry/etc...
// optionally save the displayindex as well...
}
}
嗨,你可以请给我一些线索,如何将值从C#复制到XAML?我试过这个: Dictionary
取自...:
PropertyDescriptor pd = DependencyPropertyDescriptor
.FromProperty(DataGridColumn.ActualWidthProperty,
typeof(DataGridColumn));
foreach (DataGridColumn column in Columns) {
//Add a listener for this column's width
pd.AddValueChanged(column,
new EventHandler(ColumnWidthPropertyChanged));
}
:
http://forums.silverlight.net/post/602788.aspx
负荷后
2种方法:
private bool _columnWidthChanging;
private void ColumnWidthPropertyChanged(object sender, EventArgs e)
{
// listen for when the mouse is released
_columnWidthChanging = true;
if (sender != null)
Mouse.AddPreviewMouseUpHandler(this, BaseDataGrid_MouseLeftButtonUp);
}
void BaseDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (_columnWidthChanging) {
_columnWidthChanging = false;
// save settings, etc
}
}
ColumnWidthPropertyChanged在用户拖动宽度时不断激发。添加PreviewMouseUp处理程序可让您在用户完成时进行处理。
LayoutUpdated?
我在Silverlight中工作,网格每秒钟都会反弹/刷新。
我正在使用LayoutUpdated方法,该方法针对每个布局更新事件触发。
您可以保留列宽的字典并检查增量。然后你会知道哪些列已经改变。
foreach (DataGridColumn column in dataGrid1.Columns)
{
// check for changes...
// save the column.Width property to a dictionary...
}
- 1. WPF DataGrid:调整列大小
- 2. WPF DataGrid列调整大小
- 3. 如何获取WPF datagrid列调整大小事件?
- 4. 防止WPF Datagrid列调整大小
- 5. 在wpf datagrid中调整列大小
- 6. Wpf工具包datagrid DataGridCheckBoxColumn on_click事件:
- 7. WPF防止datagrid自动调整窗口大小调整大小
- 8. WPF DataGrid窗口调整大小不会调整大小DataGridColumns
- 9. WPF调整大小的DataGrid的内容
- 10. WPF中的DataGrid自动调整大小
- 11. DataGrid列重新调整大小,重新调整大小Grid ColumnDefinitions
- 12. 样式WPF工具包DataGrid列标题
- 13. wpf工具包datagrid性能
- 14. WPF工具包Datagrid Bug
- 15. WPF工具包Datagrid排序
- 16. 调整包含包装TextBlocks的DataGrid的问题调整大小
- 17. 调整大小DataGrid不工作
- 18. WPF Datagrid模板移除调整列大小的能力
- 19. WPF DataGrid列头调整大小与自定义样式
- 20. WPF Datagrid列在更改FontSize时调整大小
- 21. Dojo DataGrid和列大小调整
- 22. Dojo DataGrid - 阻止列大小调整
- 23. GWT DataGrid调整列的大小
- 24. Infragistics Winforms Datagrid调整列大小分层
- 25. Flex DataGrid列不会调整大小
- 26. DataGrid调整大小问题
- 27. 调整大小DataGrid的调整
- 28. WPF DataGrid和Codeplex上的WPF工具包
- 29. QTableWidget列调整大小事件
- 30. jqGrid - 列调整大小事件
这并不能真正帮助,因为你只得到了一个列的宽度,如果柱在代码调整您的活动只会引起人们的关注,有些东西你可以捕获反正。 – MikeKulls 2011-11-25 02:40:06