2015-04-26 40 views
2

我有這樣的代碼:WPF工具提示放置目標返回null

<DataTemplate>         
    <Border> 
     <Border.ToolTip> 
      <ToolTip IsEnabled="True" 
        Placement="Right"> 
       <ToolTip.VerticalOffset> 
        <MultiBinding Converter="{StaticResource OffsetConverter}" 
            ConverterParameter="Vertical"> 
         <MultiBinding.Bindings> 
          <Binding RelativeSource="{RelativeSource Self}"/> 
         </MultiBinding.Bindings> 
        </MultiBinding> 
       </ToolTip.VerticalOffset> 
      <TextBlock Margin="0" 
         Padding="0" 
         TextAlignment="Left" 
         TextWrapping="Wrap" 
         MaxWidth="200" 
         Text="{Binding Description}" FontStyle="Italic"> 
       </TextBlock> 
      </ToolTip> 
     </Border.ToolTip>          
     <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Margin="0"> 
      <Image Height="16" Width="16" Style="{StaticResource AutoCompletionImageStyle}" Margin="0"/> 
      <Label Content="{Binding DisplayText}" Margin="0" Padding="0"/> 
     </StackPanel> 
    </Border> 
</DataTemplate> 

而這個轉換器:

public object Convert(object[] values, Type targetType, object parameter, 

    System.Globalization.CultureInfo culture) 
    { 
     AutoCompletionViewModel.OffsetType offsetType = (AutoCompletionViewModel.OffsetType)Enum.Parse(typeof(AutoCompletionViewModel.OffsetType), parameter.ToString()); 
     ToolTip tooltip = values[0] as ToolTip; 
     Border border = tooltip.PlacementTarget as Border; 

     double aCalculatedOffset = 0.0; 
     return aCalculatedOffset; 
    } 

我需要計算基於邊界的一些性質的工具提示的偏移。工具提示相對於邊框出現,並按預期手動更改偏移量。但是,當我嘗試訪問轉換器中的工具提示的PlacementTarget屬性時,它爲空...

因此,雖然工具提示是邊框的直接子項,應該將其作爲展示位置目標,但在代碼中一片空白。任何想法我在這裏失蹤?

我也嘗試通過與<Binding RelativeSource="{RelativeSource AncestorType={x:Type Border}}"/>的邊界無濟於事。

我真的很困惑,因爲如果邊界不是工具提示的邏輯或視覺父級,工具提示如何正確放置自己?

回答

0

我設法找到一個解決辦法:後面

<DataTemplate> 
    <Border ToolTipOpening="OnAutoCompletionBorderToolTipOpening"> 
     <Border.ToolTip> 
      <ToolTip> 
       <ToolTip.Style> 
        <Style> 
         <EventSetter Event="ToolTip.Opened" Handler="ToolTipOpenedHandler" /> 
        </Style> 
       </ToolTip.Style> 
      </ToolTip> 
     </Border.ToolTip> 
    </Border> 
</DataTemplate> 

代碼:

private void ToolTipOpenedHandler(object sender, RoutedEventArgs e) 
{ 
    ToolTip toolTip = (ToolTip)sender; 
    UIElement target = toolTip.PlacementTarget; 
    var rect = toolTip.PlacementRectangle; 

} 

這裏的目標是不是空的,而邊境...

我敢肯定這是一些WPF錯誤。希望有人能通過這篇文章得到幫助。