C# 改变数据网格单元的颜色,然后聚焦

C# 改变数据网格单元的颜色,然后聚焦,c#,wpf,xaml,datagrid,setter,C#,Wpf,Xaml,Datagrid,Setter,我可以使用setter根据文本框中更改的值更改单元格颜色,然后可以使用setter将该行聚焦。我的数据网格非常基本,2列,第二列有数字1到100。在XAML中,我有: <DataGrid Name="Sampledatagrid" AutoGenerateColumns="False" ItemsSource="{StaticResource MyOddsLadder}" Margin="0,0,0,10"

我可以使用setter根据文本框中更改的值更改单元格颜色,然后可以使用setter将该行聚焦。我的数据网格非常基本,2列,第二列有数字1到100。在XAML中,我有:

<DataGrid  Name="Sampledatagrid" AutoGenerateColumns="False" ItemsSource="{StaticResource MyOddsLadder}"  Margin="0,0,0,10" EnableRowVirtualization="False" >
        <DataGrid.Columns>
           
                <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <DataGridTextColumn Header="No" Binding="{Binding No}" />
             
        </DataGrid.Columns>

       <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <EventSetter Event="GotFocus" Handler="DataGridCell_GotFocus"></EventSetter>
                <Setter Property="Background">
                    
                    <Setter.Value>
                        <MultiBinding Converter="{StaticResource ResourceKey=CellColor}">
                            <Binding RelativeSource="{RelativeSource Mode=Self}"/>
                            <Binding Mode="OneWay" ElementName="contactFilterTextBox" Path="Text"/>
                        </MultiBinding>
                    </Setter.Value>
                </Setter>
            </Style>
            
        </DataGrid.CellStyle>

   </DataGrid>
    <TextBox x:Name="contactFilterTextBox" HorizontalAlignment="Left" Height="23" Margin="53,214,0,-57" TextWrapping="Wrap" Text="2" VerticalAlignment="Top" Width="120"  />
我所要做的就是当颜色被添加到那一行的时候。我在谷歌上搜索了很多东西,但就是不知道该怎么开始。干杯,罗伯特

public class ColorBasedOnFilterConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        System.Windows.Media.SolidColorBrush cellColor = Brushes.White;
        DataGridCell cellToAnalyze = (DataGridCell)values[0];
        TextBlock cellContents = (TextBlock)cellToAnalyze.Content;
        if (cellContents != null)
        {
            string cellValue = (string)cellContents.Text;
            string filterValue = values[1].ToString();
            if (!(String.IsNullOrEmpty(filterValue)))
          {
                if (cellValue == filterValue)
                {
                    cellColor = Brushes.LightSalmon;
                }
            }
        }
        return cellColor;
    }
    public object[] ConvertBack(
        object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}