2010-11-09 106 views
2

我有一个填充表的Datagrid。现在垂直滚动条出现了,因为表格不适合。目前为止没有问题。现在在最后一列中,我已经在xaml文件中定义了一个Button。所有这些按钮都具有相同的回调,但我可以从该表的selectedIndex中区分回调应该执行的操作。由于单击该按钮也会自动选择该按钮所在的DataGrid中的行。目前为止没有问题。现在在我的应用程序中,对于某些行,我想禁用Button,因为它对该特定行没有意义。所以我所做的就是对每个Button的事件Load进行订阅,并让回调函数设置MaxWidth = 0,如果该按钮没有意义。这工作也很好,但只在最初。只要我开始拖动滚动条,按钮列按钮随机出现,或错误的按钮将MaxWidth = 0。我有强烈的感觉,上部滚动的单元格在底部被重用,但我没有得到一个事件,或者至少我不知道我应该订阅哪个事件。我不知道如何识别滚动条。有没有人提出解决这个问题的建议?Silverlight DataGrid与垂直滚动条问题

回答

0

我终于自己找到了解决这个问题的办法,我会把它公布。 您应该订阅的事件是LoadingRow(由DataGrid生成)。 在回调

void TableLoadingRow(object sender, DataGridRowEventArgs e) 

你可以在一个小区中利用VisualTreeHelper为例说明如下标识元素:

private void ButtonSetMaxWidth(DependencyObject reference, int maxWidth) 
{ 
    if (reference != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(reference); i++) 
     { 
      var child = VisualTreeHelper.GetChild(reference, i); 
      if (child.GetType() == typeof(Button)) 
      { 
       Button b = (Button)child; 
       if (b.Name == "TheNameOfTheButtonInTheXAML") 
       { 
        b.MaxWidth = maxWidth; 
        return; 
       } 
      } 
      ButtonSetMaxWidth(child, maxWidth); 
     } 
    } 
    return; 
}