2008-10-29 1 views
1

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

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

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

ответ

0

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

Только в случае, если кто хотел бы знать код:

Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DisplayMemberPath}" 
Смежные вопросы