【问题标题】:How to change background color of selected text inside datagrid cell in WPF如何更改WPF中datagrid单元格内选定文本的背景颜色
【发布时间】:2015-08-28 00:24:08
【问题描述】:

如何在 WPF 987654322@的数据网格中选择单元格时更改文本的背景颜色

【问题讨论】:

  • 您需要覆盖数据网格单元格样式。发布您当前的 XAML 样式,然后有人可以帮助您。另外,参考这个相关问题DataGrid Selected Cell Background

标签: wpf xaml wpfdatagrid


【解决方案1】:

如果您在这些 DataGridRows 上有一个 TextBox,这里有一个完整的示例:

<Window x:Class="DataGridCellsBackground.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DataGrid SelectionUnit="Cell" 
              ItemsSource="{Binding items}" 
              AutoGenerateColumns="False">
        <DataGrid.Resources>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Name}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

所有的魔法都发生在这里:

    <Style TargetType="TextBox">
         <Style.Triggers>
             <Trigger Property="IsFocused" Value="True">
                 <Setter Property="Background" Value="Red"/>
             </Trigger>
         </Style.Triggers>
    </Style>

一个简单的 Person 类:

public class Person : INotifyPropertyChanged
{
    private string _Name;

    public string Name
    {
        get { return _Name; }
        set
        {
            _Name = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Name"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged = delegate { };
}

以及用于测试目的的代码:

public partial class MainWindow : Window
{
    public ObservableCollection<Person> items { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        items = new ObservableCollection<Person>();
        items.Add(new Person() { Name = "FirstName" });
        items.Add(new Person() { Name = "SecondName" });

        this.DataContext = this;
    }
}

案例 2

您将 DataTemplate 定义为不可编辑,但仍要选择单元格:

<DataGridTemplateColumn>
       <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                   <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

你改变你的风格:

        <Style TargetType="DataGridCell">
             <Style.Triggers>
                 <Trigger Property="IsFocused" Value="True">
                      <Setter Property="Background" Value="Red"/>
                 </Trigger>
              </Style.Triggers>
        </Style>

为什么会这样?

因为 DataGrid 的 SelectionUnit 属性设置为 Cell,所以只有一个单元格受到影响。如果将 SelectionUnit 设置为 FullRow,则背景颜色将应用于所选行中的所有单元格。

【讨论】:

    【解决方案2】:

    您可以使用类似这样的触发器来实现此目的。

    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell" >
           <Style.Triggers>
             <Trigger Property="IsEditing" Value="True">
                <Setter Property="Template">
                     <Setter.Value>
                         <ControlTemplate TargetType="DataGridCell">
                             <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text, Mode=TwoWay, UpdateSourceTrigger=Default}"
                         HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="0" BorderThickness="0" Background="SeaGreen"/>
                       </ControlTemplate>
                    </Setter.Value>
               </Setter>
            </Trigger>
         <Style.Triggers>
      </Style>
    </DataGrid.CellStyle>
    

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 2015-05-14
      • 2011-04-03
      • 2016-11-15
      • 2013-01-28
      • 2010-12-17
      • 1970-01-01
      • 2020-06-02
      • 2011-10-15
      相关资源
      最近更新 更多