【问题标题】:Binding a TextBlock back to ListBoxItem ItemSource将 TextBlock 绑定回 ListBoxItem ItemSsource
【发布时间】:2012-03-20 09:02:56
【问题描述】:

我有一个我正在尝试修改的 ListBoxItem 样式,以便当列表框变小时它会显示字符省略号。为此,我必须在我们的代码中去掉 ContentPresenter 并将其替换为 TextBlock。应用 this 的 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="{TemplateBinding DisplayMemberPath}") 无法正常工作。为了正常工作,绑定应该是什么?

【问题讨论】:

  • 你已经把你的“问题”埋在你的代码中了——我建议你编辑一下。

标签: wpf xaml binding styles listboxitem


【解决方案1】:

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

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

【讨论】:

  • 这实际上并没有解决我的问题,但它确实为我提供了指向正确方向的信息。我应该一直在研究为它创建一个 DataTemplate。我这样做了,它解决了问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多