DataGridTextColumn 中的错误 DataContext 绑定 ToolTipService.IsEnabled
Wrong DataContext binding ToolTipService.IsEnabled in DataGridTextColumn
我想使用 ToolTip
在悬停 DataGridTextColumn
时显示图像。到目前为止效果很好,但如果没有可用图像,我需要禁用工具提示。
到目前为止,这是我的代码:
<DataGridTextColumn Header="{lex:Loc material}" Binding="{Binding Material}" Width="Auto" MinWidth="75" ToolTipService.IsEnabled="{Binding ProductImageExists}" ToolTipService.ShowDuration="99999" ToolTipService.InitialShowDelay="0">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource MaterialDesignDataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<Image Source="{Binding ProductImage}" Width="250" />
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
输出结果
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ProductImageExists; DataItem=null; target element is 'DataGridTextColumn' (HashCode=42700980); target property is 'IsEnabled' (type 'Boolean')
为什么工具提示有另一个数据上下文?我怎样才能将其设置为正确的?
您不能将 DataGridTextColumn
的 属性 绑定到 ProductImageExists
,因为它不继承任何 DataContext
.
您可以在 Style
中使用 DataTrigger
绑定到 ProductImageExists
并将 ToolTip
属性 设置为 null
如果它returns false
不过:
<DataGridTextColumn Header="{lex:Loc material}"
Binding="{Binding Material}" Width="Auto" MinWidth="75"
ToolTipService.ShowDuration="99999" ToolTipService.InitialShowDelay="0">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource MaterialDesignDataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<Image Source="{Binding ProductImage}" Width="250" />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ProductImageExists}" Value="False">
<Setter Property="ToolTip" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
我想使用 ToolTip
在悬停 DataGridTextColumn
时显示图像。到目前为止效果很好,但如果没有可用图像,我需要禁用工具提示。
到目前为止,这是我的代码:
<DataGridTextColumn Header="{lex:Loc material}" Binding="{Binding Material}" Width="Auto" MinWidth="75" ToolTipService.IsEnabled="{Binding ProductImageExists}" ToolTipService.ShowDuration="99999" ToolTipService.InitialShowDelay="0">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource MaterialDesignDataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<Image Source="{Binding ProductImage}" Width="250" />
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
输出结果
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ProductImageExists; DataItem=null; target element is 'DataGridTextColumn' (HashCode=42700980); target property is 'IsEnabled' (type 'Boolean')
为什么工具提示有另一个数据上下文?我怎样才能将其设置为正确的?
您不能将 DataGridTextColumn
的 属性 绑定到 ProductImageExists
,因为它不继承任何 DataContext
.
您可以在 Style
中使用 DataTrigger
绑定到 ProductImageExists
并将 ToolTip
属性 设置为 null
如果它returns false
不过:
<DataGridTextColumn Header="{lex:Loc material}"
Binding="{Binding Material}" Width="Auto" MinWidth="75"
ToolTipService.ShowDuration="99999" ToolTipService.InitialShowDelay="0">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource MaterialDesignDataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<Image Source="{Binding ProductImage}" Width="250" />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ProductImageExists}" Value="False">
<Setter Property="ToolTip" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>