尝试
<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();
}
}
谢谢你,我想你是对的。我的问题是** ToolTipMemberPath **是父控件的一部分。我可以通过'{Binding TooltipMemberPath,RelativeSource = {RelativeSource AncestorType = {x:Type CustomListBoxControl:CustomListBox}}}'获得** ToolTipMemberPath **。如何将此与您的方法合并? – David
@David你可以使用'Converter',更新我的答案。 – Funk