5

我有一个 DataGrid,当它为空时,我希望显示背景图像。当 DataGrid 被填充时,我希望图像消失,如果 DataGrid 再次被清除,它会重新出现。

这可以通过 XAML 或 C# 实现吗?

4

3 回答 3

2

如果您使用 MVVM 设计模式,则通常应避免使用代码隐藏。不过,在 XAML 中执行此操作相当简单:

将 Image 元素放在数据网格上(将两者放在一个 Grid 中,并将 Image 放在 DataGrid 的正下方),然后使用新转换器将 Image 的 Visibility 属性绑定到 DataGrid 的 Items.Count 属性:

<Grid>
    <Grid.Resources>
        <local:GridCountToVisibilityConverter x:Key="GridCountToVisibilityConverter"/>
    </Grid.Resources>
    <DataGrid x:Name="grid"/>
    <Image Source="image.jpg" Visibility="{Binding ElementName=grid, Path=Items.Count, Converter={StaticResource GridCountToVisibilityConverter}}" />
</Grid>

转换器看起来像这样:

public class GridCountToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    { 
        var count = (int)value;
        return count == 0? Visibility.Visible : Visibility.Collapsed;
    }
}
于 2012-11-22T10:07:51.637 回答
2
if(myDataGridView.Rows.Count == 0) {

dataGrid.Background = new ImageBrush("exampleImage.png");

}

else {

// it is not empty 

}
于 2012-11-22T09:56:17.450 回答
0

我假设您正在使用 WPF,使用 Windows 表单会非常困难。

    System.Windows.Controls.DataGrid dataGrid = new System.Windows.Controls.DataGrid();

    public void Initialize()
    {
        dataGrid.Loaded += new System.Windows.RoutedEventHandler(dataGrid_Loaded);
        dataGrid.Unloaded += new System.Windows.RoutedEventHandler(dataGrid_Unloaded);

        // Show image right away.
        this.dataGrid_Unloaded(null, null);
    }

    void dataGrid_Unloaded(object sender, System.Windows.RoutedEventArgs e)
    {
        // Provide some image here.
        dataGrid.Background = new System.Windows.Media.ImageBrush();
    }

    void dataGrid_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        dataGrid.Background = System.Windows.Media.Brushes.Gray;
    }
于 2012-11-22T09:54:50.030 回答