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