2013-02-09 123 views
0

我正在使用XmlDataProvider從文件夾中獲取圖片,然後將它們顯示在列表框中,但列表框出現但沒有這些圖片有問題。圖片位於項目目錄中名爲Resources的文件夾中。WPF表面列表框中的數據綁定 - 列表框內容沒有被內容填充

這裏的代碼,XMLDATA部分:

 <!-- List content --> 
     <XmlDataProvider x:Key="tri" XPath="Root"> 
      <x:XData> 
       <Root xmlns=""> 
        <Entry Name="Cone" Image="\Resources\cone.jpg" /> 
        <Entry Name="Cube" Image="\Resources\cube.jpg" /> 
        <Entry Name="Cylinder" Image="\Resources\cylinder.jpg" /> 
        <Entry Name="Icosahedron" Image="\Resources\icosahedron.jpg" /> 
        <Entry Name="Octahedron" Image="\Resources\octahedron.jpg" /> 
        <Entry Name="Sphere" Image="\Resources\sphere.jpg" /> 
        <Entry Name="Torus" Image="\Resources\torus.jpg" /> 
        <Entry Name="YinYang" Image="\Resources\yinyang.jpg" /> 
        </Root> 
      </x:XData> 
     </XmlDataProvider> 

然後在列表框中的部分:

<s:SurfaceListBox x:Name="triList" Grid.Row="1" 
         s:SurfaceDragDrop.DragCompleted="OntriListDragCompleted" 
         s:SurfaceDragDrop.DragCanceled="OntriListDragCanceled" 
         PreviewMouseLeftButtonDown="OntriListPreviewMouseLeftButtonDown" 
         PreviewMouseMove="OntriListPreviewMouseMove" 
         PreviewMouseLeftButtonUp="OntriListPreviewMouseLeftButtonUp" 
         ItemsSource="{Binding Source={StaticResource tri}, XPath=Entry}" 
         Style="{StaticResource triListStyle}" 
         PreviewTouchDown="OntriListPreviewTouchDown" 
         PreviewTouchMove="OntriListPreviewTouchMove" 
         PreviewTouchUp="OntriListPreviewTouchUp" Height="234" VerticalAlignment="Top" Visibility="Visible" ItemsPanel="{Binding}" AllowDrop="False" /> 

列表樣式:

<Style x:Key="triListStyle" TargetType="{x:Type s:SurfaceListBox }"> 
      <Setter Property="Background" Value="{DynamicResource {x:Static s:SurfaceColors.ListBoxItemBackgroundBrushKey}}" /> 
      <Setter Property="SelectionMode" Value="Single" /> 
      <Setter Property="Height" Value="234" /> 
      <Setter Property="ItemTemplateSelector"> 
       <Setter.Value> 
        <sc:triListTemplateSelector> 
         <sc:triListTemplateSelector.NormalItemTemplate> 
          <DataTemplate > 
           <StackPanel RenderTransformOrigin="0.5, 0.5"         
           Margin="7,0,0,0" 
           MinWidth="171" MaxWidth="171"         
           MinHeight="235" MaxHeight="235"> 
            <Image Margin="14,21,21,11" Source="{Binding [email protected]}" 
          Height="149" Width="101" /> 
            <TextBlock Text="{Binding [email protected]}" 
          MaxWidth="116" 
          FontSize="12"     
          Margin="21,0,21,21" 
          FontFamily="Segoe360" 
          TextAlignment="Center" 
          TextWrapping="Wrap" 
          Foreground="{DynamicResource {x:Static s:SurfaceColors.ListBoxItemForegroundBrushKey}}" 
          HorizontalAlignment="Center" /> 
           </StackPanel> 
           </DataTemplate> 
         </sc:triListTemplateSelector.NormalItemTemplate> 

         <sc:triListTemplateSelector.StartingItemTemplate> 
          <DataTemplate> 
           <Grid Margin="17, 0, 0, -14"> 
            <StackPanel RenderTransformOrigin="0.5, 0.5" 
           Margin="7,0,0,0" 
           MinWidth="171" MaxWidth="171" 
           MinHeight="235" MaxHeight="235"> 
             <Image Margin="14,21,21,11" 
          Source="{Binding [email protected]}" 
          Height="149" 
          Width="101" /> 
             <TextBlock Text="{Binding [email protected]}" 
          MaxWidth="116" 
          FontSize="12"   
          Margin="21,0,21,21" 
          FontFamily="Segoe360" 
          TextAlignment="Center" 
          TextWrapping="Wrap" 
          Foreground="{DynamicResource {x:Static s:SurfaceColors.ListBoxItemForegroundBrushKey}}" 
          HorizontalAlignment="Center" /> 
            </StackPanel> 
            <Rectangle Fill="{DynamicResource {x:Static s:SurfaceColors.SurfaceWindowBackgroundBrushKey}}" 
           Width="17" HorizontalAlignment="Left" Margin="-26,-2.5,0,3" /> 
           </Grid> 
          </DataTemplate> 
         </sc:triListTemplateSelector.StartingItemTemplate>       
        </sc:triListTemplateSelector>    

       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <s:SurfaceScrollViewer Background="{TemplateBinding Background}" 
            VerticalScrollBarVisibility="Disabled" 
            HorizontalScrollBarVisibility="Hidden" 
            CanContentScroll="True"> 
          <!--<sc:LoopingPanel IsItemsHost="True" /> --> 
         </s:SurfaceScrollViewer> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

你能幫我找出問題?

回答

1

不知道爲什麼你需要的東西XmlDataProvider用於顯示ListBox中的一些圖片,但你需要的是一個DataTemplateImage控制,實際上每一個可視化圖像:

<DataTemplate x:Key="imageTemplate"> 
    <Image Source="{Binding [email protected]}"/> 
</DataTemplate> 

你會使用在列表框通過設置ItemTemplate屬性:

<s:SurfaceListBox ... ItemTemplate="{StaticResource imageTemplate}"/> 

還要確保該Build Action設置以Resource爲您的Visual Studio項目中的圖像文件。

+0

我想我不知道你用什麼方式使用datatemplate,因爲我有他們中的3個風格的trilist: – sgizm 2013-02-09 21:08:22

+0

你也可以發佈該風格。只需編輯您的問題並添加(相關部分)Style XAML。 – Clemens 2013-02-09 21:10:27

+0

是的,我只是。 – sgizm 2013-02-09 21:12:20