WPF ListBoxItem样式是否覆盖了我的ItemTemplate?

时间:2015-07-07 16:20:57

标签: c# .net wpf xaml mvvm

我有一个列表框,该列表框绑定到具有两个属性的对象列表ItemsNameIP

我想为每个在悬停时显示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?

1 个答案:

答案 0 :(得分:1)

您是否尝试过不绑定ContentPresenter&#39; Content?默认情况下,它应该没有它。绑定它(或使用TemplateBinding)可能会破坏默认的ContentControl功能。

检查ListBoxItem默认模板:msdn.microsoft.com/es-es/library/ms750821(v = vs.85).aspx

ContentPresenter保持原样,而ContentControl逻辑则是其余部分。