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

StackPanelの高さが90に設定されている場合、画像の上部マージンは217になります。したがって、画像は表示領域の外側にあります。

マージンをまったく設定せずに、特に左マージンを増やすことなく、ソリューションを試してください。これが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 に答える