带有垂直滚动条问题的Silverlight DataGrid

时间:2010-11-09 09:41:54

标签: datagrid button callback runtime scrollbar

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

1 个答案:

答案 0 :(得分: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;
}