2016-11-09 77 views
0

ListBox控件具有财产DisplayMemberPath指定里面是什么ListBoxItem的(一个或多个)显示。WPF XAML和:DisplayToolTipPath

不幸的是,我错过了财产DisplayToolTipPath。你知道一些简单的方法如何在XAML(我preffer XAML解决方案代码)模拟这种情况。

我的尝试是这样的:

<ListBox> 
    <ListBox.Resources> 
     <Style TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="ToolTip" Value="{Binding ??? {Binding ToolTipMemberPath}}" /> 
     </Style> 
    </ListBox.Resources> 
</ListBox> 

回答

1

尝试

<Style TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="ToolTip" Value="{Binding Path=DataContext.ToolTipMemberPath, RelativeSource={RelativeSource Self}}" /> 
</Style> 

随着ToolTipMemberPath您ListBoxItem的类所需的道具。

编辑

TooltipMemberPath是parent属性将涉及转换的最简单的解决方案:

<Style TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="ToolTip"> 
     <Setter.Value> 
      <MultiBinding Converter="{StaticResource PathToTooltipConverter}"> 
       <Binding RelativeSource="{RelativeSource Self}"/> 
       <Binding Path="TooltipMemberPath" 
         RelativeSource="{RelativeSource AncestorType={x:Type CustomListBoxControl:CustomListBox}}"/> 
      </MultiBinding> 
     </Setter.Value> 
    </Setter> 
</Style> 

IMultiValueConverter

public class PathToTooltipConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     ListBoxItem item = values[0] as ListBoxItem; 
     string tooltipMemberPath = values[1] as string; 

     if (tooltipMemberPath == null) 
      return null; 

     MyListBoxItemClass itemClass = (MyListBoxItemClass)item.DataContext; 
     return itemClass.GetType().GetProperty(tooltipMemberPath).GetValue(itemClass, null); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

谢谢你,我想你是对的。我的问题是** ToolTipMemberPath **是父控件的一部分。我可以通过'{Binding TooltipMemberPath,RelativeSource = {RelativeSource AncestorType = {x:Type CustomListBoxControl:CustomListBox}}}'获得** ToolTipMemberPath **。如何将此与您的方法合并? – David

+0

@David你可以使用'Converter',更新我的答案。 – Funk