2012-12-20 141 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

相关问题