Как получить доступ к DisplayMemberPath из ListBox при попытке привязать его к содержимому ListBoxItem? - PullRequest
1 голос
/ 29 октября 2008

Я переопределил окно ListBox для отображения изображения и фрагмента текста в каждом элементе ListBoxItem, но мне нужно отфильтровать содержимое отображаемого текста. Я надеялся сделать это путем доступа к DisplayMemberPath реального ListBox Я не могу заставить его работать.

<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 = "{TemplateBinding DisplayMemberPath}"

жалуется на: Не удается найти статический член 'DisplayMemberPathProperty' для типа 'ListBoxItem'

Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 29 октября 2008

Хорошо, теперь я получил значение из ListBox, все, что мне нужно сделать, - это преобразовать его, чтобы получить необходимое мне свойство у объекта данных в источнике элементов.

На всякий случай, если кто-то захочет узнать код:

Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DisplayMemberPath}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...