Покажите Подсказку WPF в случае необходимости

Закрытие является способом пойти. Таким образом, у Вас будет точная ссылка на элемент, который даже переживет некоторую перестановку DOM.

Пример для тех, кто не знает закрытия:

var saved_element = findThatDOMNode();

document.body.onclick = function() 
{
   alert(saved_element); // it's still there!
}

, Если необходимо было сохранить его в cookie, тогда я рекомендую вычислительный XPath для него (например, идите по DOM подсчет предыдущих одноуровневых элементов, пока Вы не найдете элемент с идентификатором, и Вы закончите с чем-то как [@id=foo]/div[4]/p[2]/a).

XPointer является решением W3C той проблемы.

23
задан Martin Konicek 12 July 2009 в 12:12
поделиться

3 ответа

Я понял это, всплывающая подсказка имеет свойство PlacementTarget , которое определяет элемент пользовательского интерфейса, который имеет всплывающую подсказку. Если кому-то это понадобится:

<TextBlock Text="{Binding Text}">
    <TextBlock.ToolTip>
        <ToolTip 
             DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" 
             Visibility="{Binding Converter={StaticResource toolVisConverter}}">
             <TextBlock Text="{Binding Text}"/>  <!-- tooltip content -->
         </ToolTip>
    </TextBlock.ToolTip>
</TextBlock>

А затем напишите Converter, который преобразует TextBlock в Visibility (на основе ширины TextBlock).

32
ответ дан 29 November 2019 в 02:16
поделиться

Хорошо, а почему это только жесткий XAML-способ? Это работает:

<TextBlock Text="{Binding Text}"
     IsMouseDirectlyOverChanged="TextBlock_IsMouseDirectlyOverChanged" >
     <TextBlock.ToolTip>
     <ToolTip Visibility="Collapsed">
         <TextBlock Text="{Binding Text}"></TextBlock>
     </ToolTip>
     </TextBlock.ToolTip>
</TextBlock>

в Control.xaml.cs:

private void TextBlock_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    bool isMouseOver = (bool)e.NewValue;
    if (!isMouseOver)
        return;
    TextBlock textBlock = (TextBlock)sender;
    bool needed = textBlock.ActualWidth > 
        (this.listView.View as GridView).Columns[2].ActualWidth;
    ((ToolTip)textBlock.ToolTip).Visibility = 
        needed ? Visibility.Visible : Visibility.Collapsed;
}
5
ответ дан 29 November 2019 в 02:16
поделиться

Я думаю, вам нужно посмотреть на триггер ControlTemplate, чтобы решить эту проблему. К сожалению, триггеры ControlTemplate всегда сравниваются с определенным значением, не меньше или больше. Это можно сделать, например, если ширина = 100, а не ширина <100.

0
ответ дан 29 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: