所以,我有一个数据网格,根据单元格的值,它具有不同的颜色单元格.
我还有一个工具提示,显示一些进一步的信息.一切正常.
但是,我想改变工具提示以显示更多信息,并且还要与单元格颜色相同.所以,我认为为我的工具提示创建自定义样式是明智的.所以,我有以下代码.
<Style TargetType="ToolTip">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border CornerRadius="15,15,15,15"
BorderThickness="3,3,3,3"
Background="#AA000000"
BorderBrush="#99FFFFFF"
RenderTransformOrigin="0.5,0.5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"/>
<TextBlock Grid.Row="1"/>
<TextBlock Grid.Row="2"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
我有一个如下所示的对象绑定到我的datagrid.我想将三个属性绑定到工具提示中的三个文本框.
class MyTask
{
public string Name;
public int Code;
public string Description;
}
Run Code Online (Sandbox Code Playgroud)
在我的DataGrid中,我执行以下操作将数据绑定到datagrid
ItemsSource="{Binding TaskList}"
Run Code Online (Sandbox Code Playgroud)
然后在DataGridTextColumn中我绑定到如下所示的属性
DataGridTextColumn Header="Code" Binding="{Binding Code}"
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义.然而,在创建自定义工具提示时,我无法看到我如何使用绑定.我读过我可以使用templatebinding.我仍然不明白我的工具提示将如何绑定到我的xaml上面的MyTask类型的对象?
更新 - 希望让我的问题更清晰
我想知道如何在我的控件模板(对于3个文本框)中创建绑定,然后在我的代码的主要部分中如何绑定到这些文本框.然后我想知道如何为我的控件模板的背景颜色创建一个绑定,我相信这与relativesource有关吗?
当我正在阅读其他示例(更改模板属性)时,我会看到如下所示的行.我真的不明白你为什么要这么做?如果你没有在下面的行右边,你将无法在Padding属性上创建绑定吗?
<Border Padding="{Binding Padding}" ...>
Run Code Online (Sandbox Code Playgroud)
您不需要TemplateBindng,因为它用于基于动态使用实现控件的属性将结果模板对象设置为布局.有关何时需要此类功能的良好示例,请参阅此CodePlex文章.
您只需在您的TextBlock
元素中设置元素的绑定ToolTip
.在这种情况下,您根本不需要模板,除非您在所有列单元格中使用相同的工具提示,它将帮助您,因为您不需要复制粘贴相同的代码三次.您正在阅读类似于本文的内容,即WPF中DataGrid中的Tooltip.
一个专门针对您的案例的解决方案将是:
<DataGrid Name="TestGrid1" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}">
<TextBlock.ToolTip>
<ToolTip />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Code">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Code}">
<TextBlock.ToolTip>
<ToolTip />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Description">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}">
<TextBlock.ToolTip>
<ToolTip />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType="ToolTip">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border CornerRadius="15,15,15,15"
BorderThickness="3,3,3,3"
Background="#AA000000"
BorderBrush="#99FFFFFF"
RenderTransformOrigin="0.5,0.5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding Name}"/>
<TextBlock Grid.Row="1" Text="{Binding Code}"/>
<TextBlock Grid.Row="2" Text="{Binding Description}"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
您可以在其中设置ToolTip
属性,CellTemplate
以便ToolTip
弹出的结果与DataContext
中的活动行相同DataGrid
.这样,您可以在您的内容中正常执行属性绑定ToolTip
ContentTemplate
,因为它可以访问与行相同的所有属性DataGrid
.