我尝试使用以下XAML
搜索dataGrid
<DataGrid x:Name="grid" local:DataGridTextSearch.SearchValue="{Binding ElementName=SearchBox, Path=Text, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding TestData}" >
<DataGrid.Resources>
<local:SearchValueConverter x:Key="SearchValueConverter" />
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="local:DataGridTextSearch.IsTextMatch">
<Setter.Value>
<MultiBinding Converter="{StaticResource SearchValueConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="DataContext.MyProperty" />
<Binding RelativeSource="{RelativeSource Self}" Path="(local:DataGridTextSearch.SearchValue)" />
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="local:DataGridTextSearch.IsTextMatch" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
</DataGrid>
我是从here
得到的但是它给了我一个DataGrid
未定义的错误。所以我将<DataGrid>
更改为<my:DataGrid>
现在它在第1行给出了以下错误: 在DataGridTextSearch类型中找不到可附加属性SearchValue。
线上的另一个错误没有。 3: 找不到类型local:SearchValueConverter。验证您是否缺少程序集引用并且已构建所有引用程序集。
我窗口的XAML看起来像:
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="532" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">
<Grid>
<TextBox Height="29" Margin="104,22,147,0" Name="txt" VerticalAlignment="Top" AutoWordSelection="True" />
<my:DataGrid x:Name="grid" local:DataGridTextSearch.SearchValue="{Binding ElementName=SearchBox, Path=Text, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding TestData}" >
<my:DataGrid.Resources>
<local:SearchValueConverter x:Key="SearchValueConverter" />
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="local:DataGridTextSearch.IsTextMatch">
<Setter.Value>
<MultiBinding Converter="{StaticResource SearchValueConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="DataContext.MyProperty" />
<Binding RelativeSource="{RelativeSource Self}" Path="(local:DataGridTextSearch.SearchValue)" />
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="local:DataGridTextSearch.IsTextMatch" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</my:DataGrid.Resources>
</my:DataGrid>
</Grid>
</Window>
答案 0 :(得分:2)
你搞砸了命名空间,引用和(我猜)Resharper。 首先 - 不需要为DataGrid指定名称空间 - 它是标准控件,所以如果它不被识别 - 可能你真的错过了项目引用中的一些程序集。
然后 - 检查你的命名空间 - 我猜x:Class =“Window1”是错误的,因为那里通常有项目命名空间前缀。
第三,在使用任何命名空间之前,包括“local”,你需要先定义它,比如xmlns:local =“clr-namespace:你的命名空间就在这里”,所以local:DataGridTextSearch和类似的表达式之前不会工作你这样做了
最后,在继续修复XAML警告之前构建您的解决方案 - 通常,如果您做的一切正确,它们会在构建后消失。
我建议 - 创建一个新的空WPF应用程序项目,从你提到的帖子中复制所有代码(包括代码隐藏)并检查你的问题是否仍然存在。