Silverlight 4: как показать всплывающую подсказку о фокусе клавиатуры (исправлено) - PullRequest
0 голосов
/ 27 сентября 2011

Мой первоначальный вопрос:

Существует ли простой способ отображения всплывающей подсказки, когда элемент получает фокус клавиатуры, а не только при наведении мыши?У нас есть список элементов со всплывающими подсказками, которые пользователи, вероятно, будут перемещать, и желаемое поведение также должно отображаться во всплывающей подсказке.

Добавлен пример XAML.HyperlinkButton с набором всплывающих подсказок - это то, что также требует фокусировки на клавиатуре.

    <DataTemplate x:Key="OfferingItemDT">
        <HyperlinkButton Command="{Binding Path=NavigateToLinkCommand}" ToolTipService.ToolTip="{Binding Tooltip}">                
             <Grid x:Name="gOfferingButtonRoot" Width="275" MaxHeight="78" Margin="5,3">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="40"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <Image x:Name="imgServiceOfferingIcon" 
                Grid.RowSpan="2"            
                VerticalAlignment="Top" 
                Source="{Binding Path=Image, Converter={StaticResource ByteArrayToImageConverter}}" 
                Stretch="UniformToFill" 
                Margin="2,10,0,0"
                MaxHeight="32" MaxWidth="32"
                />
                <TextBlock x:Name="txbOfferingTitle"
                    Grid.Column="1"
                    Grid.Row="0"
                    Text="{Binding Title}"                               
                    TextWrapping="Wrap"                                        
                    Style="{StaticResource OfferingTileTitleText}"/>
                <TextBlock x:Name="txbOfferingDesc"
                Grid.Column="1"
                Grid.Row="1"
                Style="{StaticResource OfferingTileBodyText}"
                Text="{Binding BriefDescription}" />

             </Grid>
        </HyperlinkButton>
    </DataTemplate>             

Обновлено: на основе информации в WPF: Показать и сохранить всплывающую подсказку для текстового поля на основе курсора какКак и комментарии Энтони, я попробовал этот код в обработчике событий GotFocus:

        private void showTooltip(object sender, RoutedEventArgs e)
    {
        HyperlinkButton hb = new HyperlinkButton();
        ToolTip ttip = new ToolTip();


        hb = sender as HyperlinkButton;


        ttip = ToolTipService.GetToolTip(hb) as ToolTip;
        ttip.IsOpen = true;            

    }

Кажется, что это будет работать, но ttip всегда равен нулю.Помощь

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

«Легкий» - это субъективный термин. Да, это легко. В том же элементе пользовательского интерфейса, к которому вы присоединяете ToolTip, вы можете подключить обработчик событий GotFocus и LostFocus, который будет использовать ToolTipService.GetToolTip для получения всплывающей подсказки и набора IsOpen для true и false соответственно.

0 голосов
/ 03 августа 2012

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

<HyperlinkButton MouseLeftButtonUp="showTooltip">
  <ToolTipService.ToolTip>
    <ToolTip>
      <TextBlock Text="My tooltip text"/>
    </ToolTip>
  </ToolTipService.ToolTip>
  <!-- ... -->
</HyperlinkButton>

Код позади

private void showTooltip(object sender, RoutedEventArgs e)
{
  FrameworkElement frameworkElement = (FrameworkElement)sender;
  ToolTip tooltip = ToolTipService.GetToolTip(frameworkElement) as ToolTip;
  if (tooltip != null)
  {
    tooltip.IsOpen = true;
    frameworkElement.MouseLeave += new MouseEventHandler(frameworkElement_MouseLeave);
  }
}

static void frameworkElement_MouseLeave(object sender, MouseEventArgs e)
{
  FrameworkElement frameworkElement = (FrameworkElement)sender;
  frameworkElement.MouseLeave -= new MouseEventHandler(frameworkElement_MouseLeave);

  ToolTip tooltip = ToolTipService.GetToolTip(frameworkElement) as ToolTip;
  if (tooltip != null)
  {
    tooltip.IsOpen = false;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...