我有一个列表框,该列表框绑定到具有两个属性的对象列表Items
:Name
和IP
。
我想为每个在悬停时显示IP地址的项目设置工具提示,所以我已经这样做了:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" ToolTip="{Binding IP}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这很有效。但是,当我应用以下样式时,似乎我的<DataTemplate>
被完全忽略,而列表只是在我的对象上调用ToString()
,工具提示根本就不显示。
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="true">
<Grid>
<GridViewRowPresenter x:Name="gridrowPresenter"
Content="{TemplateBinding Property=ContentControl.Content}" />
<ContentPresenter x:Name="contentPresenter"
Content="{TemplateBinding Property=ContentControl.Content}" Visibility="Collapsed" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="GridView.ColumnCollection" Value="{x:Null}">
<Setter TargetName="contentPresenter" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="Control.IsMouseOver" Value="true">
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="#FFE6E6E6" Opacity="0.75"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="#FFA5C5D1" Opacity="0.75"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
为什么这种风格会阻止应用DataTemplate?
答案 0 :(得分:1)
您是否尝试过不绑定ContentPresenter&#39; Content
?默认情况下,它应该没有它。绑定它(或使用TemplateBinding)可能会破坏默认的ContentControl功能。
检查ListBoxItem
默认模板:msdn.microsoft.com/es-es/library/ms750821(v = vs.85).aspx
ContentPresenter
保持原样,而ContentControl逻辑则是其余部分。