Tenho controle de datagrid em meu projeto e quero adicionar uma dica de ferramenta às células de datagrid. Personalizei o controle de dica de ferramenta e coloquei um controle de caixa de texto nele. Tentei vincular o valor do conteúdo da célula à caixa de texto, mas não funcionou.
Quando utilizo o controle Tooltip diretamente (sem customizar) ele funciona.
Este é o código xaml:
Sem personalizar, a ligação da dica de ferramenta está funcionando.
<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"/>
Mas a vinculação de dicas de ferramentas personalizadas não está funcionando.
<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"/>
Esta é a classe do modelo:
public class Person
{
public string PersonName { get; set; }
public string Surname { get; set; }
public string Details { get; set; }
}
Esta é a classe 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));
}
}
}
Você precisa fazer algo assim:
Tenho que incluir
ToolTip
para acessar seuPlacementTarget
.DataContext
retorne-nosPerson
a instância (você pode substituirToString
ou usar o modelo de dados para ver suas propriedades na dica de ferramenta). UseContent.Text
em vez disso se desejar apenas texto desta célula.