Неправильная привязка DataContext ToolTipService.IsEnabled в DataGridTextColumn - PullRequest
0 голосов
/ 04 октября 2019

Я хочу отобразить изображение при наведении DataGridTextColumn с использованием ToolTip. Пока он отлично работает, но мне нужно отключить всплывающую подсказку, если изображение недоступно.

На данный момент это мой код:

<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')

Почему во всплывающей подсказке есть еще один текстовый текст? Как я могу установить его на правильный?

1 Ответ

1 голос
/ 04 октября 2019

Вы не можете связать свойство DataGridTextColumn с ProductImageExists, потому что оно не наследует DataContext.

. Вы можете использовать DataTrigger в Style, который связываетв ProductImageExists и устанавливает свойство ToolTip в null, если оно возвращает 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>
...