我想灰显并禁用datagrid中的特定行。将bool标志IsEnabled设置为false的所有行应显示为灰色并禁用以进行编辑。我怎样才能做到这一点?
您可以在下面找到我的示例代码:
MainWindow.xaml
<Window x:Class="WpfApplicationDisableRows.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplicationDisableRows"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
</Window.Resources>
<StackPanel>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Width="500" Height="250">
<DataGrid.Columns>
<DataGridTextColumn FontWeight="Bold" IsReadOnly="True" Width="200" Header="Description" Binding="{Binding Path=Description}"></DataGridTextColumn>
<DataGridTextColumn FontWeight="Bold" Width="200" Header="Value" Binding="{Binding Path=Value}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfApplicationDisableRows
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
ObservableCollection<Row> Rows;
public MainWindow()
{
Rows = new ObservableCollection<Row>();
AddRows();
InitializeComponent();
this.DataContext = Rows;
}
public void AddRows()
{
Rows.Add(new Row { Description = "Row1", Value = "A", IsEnabled = true });
Rows.Add(new Row { Description = "Row2", Value = "B", IsEnabled = false });
Rows.Add(new Row { Description = "Row3", Value = "C", IsEnabled = true });
}
}
}
Row.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WpfApplicationDisableRows
{
public class Row : INotifyPropertyChanged
{
private bool _IsEnabled;
public event PropertyChangedEventHandler PropertyChanged;
public string Description { get; set; }
public string Value { get; set; }
public bool IsEnabled
{
get
{
return _IsEnabled;
}
set
{
_IsEnabled = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsEnabled"));
}
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
}
}
Row2应该显示为灰色并禁用编辑,因为IsEnabled为false
Description = "Row2", Value = "B", IsEnabled = false
Row1和Row3的标志IsEnabled = true,这些行应该是可编辑的。
Description = "Row1", Value = "A", IsEnabled = true
Description = "Row3", Value = "C", IsEnabled = true
答案 0 :(得分:0)
制作RowStyle和Trigger IsEnabled属性 喜欢这个
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="Fasle">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>