【发布时间】:2024-04-25 20:05:02
【问题描述】:
我试图在用户输入的文本框中突出显示以给定值开头的所有单元格。我查看了几个示例,生成了以下代码,在您开始垂直滚动之前,它可以正常工作。
首先我们有 XAML,它利用了多重绑定:
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource CellColor}">
<Binding RelativeSource="{RelativeSource Mode=Self}"/>
<Binding Mode="OneWay" ElementName="contactFilterTextBox" Path="Text"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
接下来是我创建的类,它继承自 IMultiValueConverter 类:
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.ToUpper().StartsWith(filterValue.ToUpper()))
{
cellColor = Brushes.LightSalmon;
}
}
}
return cellColor;
}
public object[] ConvertBack(
object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
最初,它的工作方式与我期望的一样,如下所示:
那么问题是当我滚动时,显然选择了如下图所示的值?
我对 WPF 很陌生,当然我做错了什么,但我对它是什么感到困惑。任何帮助将不胜感激。
【问题讨论】: