我的代码在目录中搜索包含图像,然后应该加载 他们进入可滚动的面板。
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 :(得分: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);
}
下一步可能是使用ImagePaths
类型为ObservableCollection<string>
的属性创建一个视图模型对象,并将ListBox的ItemsSource绑定到该属性。