将TextBlock绑定回ListBoxItem ItemSsource

时间:2012-03-01 20:27:25

标签: wpf xaml binding styles listboxitem

我有一个ListBoxItem样式,我试图修改它,以便当列表框变小时它将显示字符省略号。为此,我必须在代码中删除ContentPresenter并将其替换为TextBlock。应用它的ListBox都是通过ItemSource属性绑定的。

这是我的代码。

<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Background" Value="White"/>
    <Setter Property="Margin" Value="0,0,0,0"/>
    <Setter Property="Padding" Value="0,0,0,0"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Grid>
                    <Border x:Name="Bd" SnapsToDevicePixels="true">
                        <!-- Before this used to be ContentPresenter but I switched it to TextBlock to get it the TextTrimming property. I can't find the right way to bind the data though.-->
                        <TextBlock Text="{TemplateBinding DisplayMemberPath}" TextTrimming="CharacterEllipsis" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <Rectangle x:Name="HoverRectangle"
                               Stroke="{StaticResource Gold}"
                               StrokeDashCap="Square"
                               StrokeThickness="0"
                               SnapsToDevicePixels="True" />
                    <Rectangle x:Name="KeyboardFocusRectangle"
                               Height="Auto"
                               SnapsToDevicePixels="True"
                               Stroke="{StaticResource BrightBlue}"
                               StrokeDashCap="Square"
                               StrokeThickness="0" />
                </Grid>
                <ControlTemplate.Triggers>
                     <!-- Bunch of Triggers in here -->
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我当前的TextBlock Text绑定(Text =&#34; {TemplateBinding DisplayMemberPath}&#34;)无效。为了正常工作,绑定应该是什么?

1 个答案:

答案 0 :(得分:0)

这里唯一合理的选择是假设ListBoxItem的数据上下文是一个字符串,或者可以这样显示:

<TextBlock Text="{Binding}" .../>