Comment pouvez-vous accéder à DisplayMemberPath à partir d'un ListBox lorsque vous essayez de le lier au contenu du ListBoxItem?

StackOverflow https://stackoverflow.com/questions/246792

  •  05-07-2019
  •  | 
  •  

Question

J'ai remplacé le ListBox de Windows afin d'afficher une image et un morceau de texte dans chaque ListBoxItem, mais je dois filtrer le contenu du texte affiché. J'espérais le faire en accédant à DisplayMemberPath du ListBox réel. Je ne peux pas le faire fonctionner.

<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>

C’est le code que j’utilise pour mon style et c’est la ligne que je ne parviens pas à faire fonctionner:

Content = "{TemplateBinding DisplayMemberPath}"

Il se plaint de: Impossible de trouver le membre statique 'DisplayMemberPathProperty' sur le type 'ListBoxItem'

Quelqu'un peut-il m'indiquer la bonne direction?

Était-ce utile?

La solution

Son ok, j'ai maintenant la valeur du ListBox, tout ce que j'ai à faire est de le convertir pour qu'il prenne la propriété dont j'ai besoin du dataobject dans itemssource.

Juste au cas où quelqu'un voudrait connaître le code:

Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DisplayMemberPath}"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top