代码之家  ›  专栏  ›  技术社区  ›  Bijington

当试图将DisplayMemberPath绑定到ListBoxItem的内容时,如何从列表框访问它?

  •  1
  • Bijington  · 技术社区  · 16 年前

    为了在每个列表框项中显示一个图像和一段文本,我已经重写了Windows列表框,但是我需要过滤显示的文本的内容,我希望通过访问实际列表框的DisplayMemberPath来实现这一点,但是我无法使其正常工作。

    <Setter Property="ItemContainerStyle">
            <Setter.Value>
                <!-- Simple ListBoxItem - This is used for each Item in a ListBox. The item's content is placed in the ContentPresenter -->
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="SnapsToDevicePixels" Value="true"/>
                    <Setter Property="OverridesDefaultStyle" Value="true"/>
                    <Setter Property="VerticalContentAlignment" Value="Center"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                                <Grid SnapsToDevicePixels="true">
                                    <Border x:Name="Border">
                                        <Grid Height="40">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto"/>
                                                <ColumnDefinition Width="*"/>
                                            </Grid.ColumnDefinitions>
                                            <Image
                                                Source="{Binding Path=ThumbnailImage}"
                                                Height="30"
                                                Width="30"
                                                Grid.Column="0"/>
    
                                            <Label 
                                                x:Name="Text"
                                                Content="{TemplateBinding DisplayMemberPath}"
                                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                VerticalContentAlignment="Center"
                                                HorizontalAlignment="Stretch"
                                                Grid.Column="1"
                                                Height="40"/>
                                        </Grid>
                                    </Border>
                                </Grid>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsSelected" Value="true">
                                        <Setter Property="FontWeight" Value="Bold" TargetName="Text"/>
                                        <Setter Property="Foreground" Value="White" TargetName="Text"/>
                                        <Setter Property="Background" Value="Blue" TargetName="Border"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Setter.Value>
        </Setter>
    

    这是我的样式使用的代码,这是我无法使用的行:

    content=“模板绑定显示成员路径”

    它抱怨: 在类型“ListBoxItem”上找不到静态成员“DisplayMemberPathProperty”

    有人能给我指出正确的方向吗?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Bijington    16 年前

    好的,我现在已经从列表框中得到了值,我需要做的就是将它转换为从itemssource中的dataobject获取我需要的属性。

    以防万一有人想知道密码:

    Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DisplayMemberPath}"