1

我的代码在目录中搜索包含图像,然后将它们加载到可滚动面板中。

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>

4

1 回答 1

2

您的图像的上边距为 217,其中 StackPanel 高度仅设置为 90。因此图像位于可见区域之外。

在不设置任何边距的情况下尝试您的解决方案,尤其是在不增加左边距的情况下。这就是 StackPanel 所做的,它在水平方向上并排放置图像,因为您已经设置了Orientation="Horizontal".


无论如何,更好的解决方案是将 StackPanel 替换为 ListBox 并简单地将图像添加到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);
}

下一步可能是创建一个具有ImagePaths类型属性的视图模型对象,ObservableCollection<string>并将 ListBox 的ItemsSource绑定到该属性。

于 2012-12-20T15:02:57.193 回答