2012-12-20 41 views
0

我的代碼搜索包含圖像的目錄,然後應將它們加載到可滾動面板中。使用ScrollViewer以編程方式將圖像添加到StackPanel

foreach (FileInfo item in di.GetFiles()) 
     { 
      if (item.Extension.ToLower().Contains("tif")){ 

       Image im = new Image(); 
       im.Height = 93; im.Width = 90; 

       im.Margin =new Thickness(imLeft,217,0,0); 
       im.Name = "Image" + imLeft.ToString(); 
       im.MouseLeftButtonDown += im_MouseLeftButtonDown; 
       imLeft += 91; 
       BitmapImage myBitmapImage = new BitmapImage(); 


       myBitmapImage.BeginInit(); 
       myBitmapImage.UriSource = new Uri(item.FullName); 

       myBitmapImage.DecodePixelWidth = 200; 
       myBitmapImage.EndInit(); 
       //set image source 
       im.Source = myBitmapImage; 
       im.Visibility = Visibility.Visible; 
       SP1.Children.Add(im); 


      } 
     } 

執行此代碼後,我看到滾動顯示,但圖像不可見?在調試過程中,我發現每一行都正確地執行正確的參數。 所以,我的問題是爲什麼圖像是不可見的?

謝謝。

這是我的XAML:

<ScrollViewer Margin="0,216,0,9" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" Name="myScrollViever" > 
     <StackPanel Height="90" HorizontalAlignment="Left" Name="SP1" VerticalAlignment="Top" Orientation="Horizontal" 
        CanHorizontallyScroll="True" ForceCursor="False" SnapsToDevicePixels="True" OverridesDefaultStyle="True" > 
     </StackPanel> 

    </ScrollViewer> 

+0

請發佈相關的XAML。並且不需要在示例代碼中保留冗長的註釋。它只會讓閱讀變得更難。 – Clemens

+0

謝謝。剛剛編輯。 – Yuri

回答

2

您的圖像獲得的217頂邊距其中StackPanel的高度設置爲僅90.因此,圖像的可見區域之外。

嘗試您的解決方案而不設置任何邊距,尤其是沒有增加左邊距。這就是StackPanel所做的,它將水平方向上的圖像並排放置,因爲您已設置Orientation="Horizontal"


無論如何,一個更好的解決辦法是由一個ListBox更換的StackPanel和簡單的圖像添加到Items集合:

<ListBox x:Name="list"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding}" Width="90" Margin="1,0,0,0"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

在代碼中,你想補充相似圖片:

string directory = ... 
foreach (var file in Directory.GetFiles(directory).Where(f => f.EndsWith(".tif"))) 
{ 
    // list.Items.Add(new BitmapImage(new Uri(file))); 
    // or just add the filename, a default type converter will convert it into an ImageSource 
    list.Items.Add(file); 
} 

的下一步可能是創建與someth視圖模型對象就像一個ImagePaths類型爲ObservableCollection<string>的屬性,並將列表框的ItemsSource綁定到該屬性。

+0

非常感謝。 – Yuri

相關問題