我的项目中有数据网格控件,我想向数据网格单元格添加工具提示。我自定义了工具提示控件并在其中放置了一个文本框控件。我尝试将单元格内容值绑定到文本框,但没有成功。
当我直接使用工具提示控制(无需自定义)时,它可以起作用。
这是 xaml 代码:
无需自定义工具提示绑定即可工作。
<Window.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=Content.Text}"/>
</Style>
</Window.Resources>
<DataGrid ItemsSource="{Binding Persons}"
AutoGenerateColumns="True"/>
但自定义的工具提示绑定不起作用。
<Window.Resources>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip">
<Setter.Value>
<TextBox Text="{Binding RelativeSource={RelativeSource Self},Path=Content.Text}"/>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<DataGrid ItemsSource="{Binding Persons}"
AutoGenerateColumns="True"/>
这是模型类:
public class Person
{
public string PersonName { get; set; }
public string Surname { get; set; }
public string Details { get; set; }
}
这是 ViewModel 类:
public class MainViewVM:INotifyPropertyChanged
{
public ObservableCollection<Person> Persons { get; set; }
public MainViewVM()
{
Persons = new ObservableCollection<Person>
{
new Person()
{
PersonName = "Andrei",
Surname = "Surname 1"
},
new Person()
{
PersonName = "Jack",
Surname = "Surname 2"
},
new Person()
{
PersonName = "Melisa",
Surname = "Surname 3"
}
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyOfPropertyChange(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
你需要做这样的事情:
我必须包括
ToolTip
才能访问它的PlacementTarget
。DataContext
返回我们的Person
实例(您可以覆盖ToString
或使用数据模板在工具提示中查看其属性)。Content.Text
如果您只想要此单元格中的文本,请使用。