Всплывающая подсказка пуста. Как мне получить к нему доступ? - PullRequest
1 голос
/ 27 декабря 2011

В моем пользовательском элементе управления я хочу программно включить или отключить всплывающую подсказку в зависимости от параметров. Вот как моя иконка определяется в шаблоне:

<Image x:Name="PART_IconImage" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{TemplateBinding Icon}" 
                                   ToolTipService.ToolTip="{TemplateBinding Caption}" />

Я использую этот код для доступа к всплывающей подсказке и для включения / выключения:

// Enable tooltip when caption not shown
            if (this.IconImage != null)
            {
                var toolTip = ToolTipService.GetToolTip(this.IconImage) as ToolTip;

                if (toolTip != null)
                    toolTip.IsEnabled = this.CaptionVisibility.HasValue
                                        ? (this.CaptionVisibility.Value == Visibility.Collapsed)
                                        : (this.ParentToolbar.CaptionsVisibility == Visibility.Collapsed);
            }

GetToolTip возвращает значение NULL. Есть идеи почему?

P.S. Я следовал этому совету здесь: Как программно получить доступ к ToolTipService для Silverlight FrameworkElement? Но это не работает для меня.

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Вы уверены, что ToolTipService.GetToolTip возвращает ноль, в отличие от возврата чего-то отличного от ToolTip?

Я провел быстрый эксперимент с кодом, похожим на ваш, и обнаружил, что ToolTipService.GetToolTip вернул строку. Я, конечно, связывал ToolTipService.ToolTip со свойством зависимости от строки. Я подозреваю, что вы также получаете строку обратно от GetToolTip, но as ToolTip, который вы добавили после вызова этого метода, обнуляет эту строку.

Один из способов программно отключить всплывающую подсказку - привязать ее к свойству модели представления, которое содержит текст всплывающей подсказки, если подсказка должна отображаться, или ноль, если подсказка не должна отображаться.

В качестве альтернативы, вы можете использовать ToolTip вместо строки в качестве всплывающей подсказки для вашего элемента управления. Таким образом вы сможете получить доступ к объекту ToolTip и включить / отключить его в приведенном выше коде:

<Image x:Name="PART_IconImage" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{TemplateBinding Icon}">
    <ToolTipService.ToolTip>
        <ToolTip>
            <TextBlock Text="{TemplateBinding Caption}" />
        </ToolTip>
    </ToolTipService.ToolTip>
</Image> 
1 голос
/ 27 декабря 2011

Почему бы вам просто не связать свойство ниже с помощью свойства bool?

ToolTipService.IsEnabled 

Затем, когда вы захотите отключить / включить, просто измените свойство связывания

<<code>Image ToolTipService.IsEnabled="{Binding Path=SomeProperty}">

Также взгляните на Как отключить всплывающие подсказки в коде во время выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...