【问题标题】:Turning a WPF DataGrid background image on and off?打开和关闭 WPF DataGrid 背景图像?
【发布时间】:2012-11-22 09:51:24
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net wpf xaml


    【解决方案1】:
    if(myDataGridView.Rows.Count == 0) {
    
    dataGrid.Background = new ImageBrush("exampleImage.png");
    
    }
    
    else {
    
    // it is not empty 
    
    }
    

    【讨论】:

      【解决方案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;
          }
      }
      

      【讨论】:

      • 你应该可以使用Path=HasItems和使用WPF内置的BooleanToVisibilityConverter
      • 是的... Path=HasItems 更好
      【解决方案3】:

      我假设您使用的是 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;
          }
      

      【讨论】:

        猜你喜欢
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多