Lista obiektów z obrazkami drinków

0

Chcę stworzyć listę obiektów składającą się obrazków. Moje obiekty to drinki. Każdy z nich ma swoje parametry w postaci nazwy, składników i tam innych oraz ścieżki do obrazu na dysku. I teraz nie wiem jak mam zrobić żeby było przykładowo po 4 obrazki w wierszu z podpisem. Nie wiem jak wczytać te obrazy z dysku i wstawić do listview.

2

@spartanPAGE w tagach jest wpf.

<?xml version="1.0" encoding="UTF-8"?>
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="WpfTutorialSamples.ListView_control.ListViewBasicSample" Title="ListViewBasicSample" Height="200" Width="200">
  <Grid>
    <ListView Margin="10">
      <ListViewItem>
        <StackPanel Orientation="Horizontal">
          <Image Source="/WpfTutorialSamples;component/Images/bullet_green.png" Margin="0,0,5,0" />
          <TextBlock>Green</TextBlock>
        </StackPanel>
      </ListViewItem>
      <ListViewItem>
        <StackPanel Orientation="Horizontal">
          <Image Source="/WpfTutorialSamples;component/Images/bullet_blue.png" Margin="0,0,5,0" />
          <TextBlock>Blue</TextBlock>
        </StackPanel>
      </ListViewItem>
      <ListViewItem IsSelected="True">
        <StackPanel Orientation="Horizontal">
          <Image Source="/WpfTutorialSamples;component/Images/bullet_red.png" Margin="0,0,5,0" />
          <TextBlock>Red</TextBlock>
        </StackPanel>
      </ListViewItem>
    </ListView>
  </Grid>
</Window>

listview_simple_images.png

Źródło: http://www.wpf-tutorial.com/listview-control/simple-listview/

0

listview_simple_images.png

Chodziło mi bardziej o takie ułożenie niż jedno pod drugim. Do takiego sięgnę w ostateczności.
e202445f39.png

0

Więc zrób to w gridzie a nie w listView.

0

A jak sobie poradzić z tym że zdjęcia są na dysku a nie w zasobach programu? Jakimś tutorialem co do tego jak to zrobić w gridzie byś poratował ?

0

A tu http://tnij.org/zxpya3y szukałeś?

0

@GarryMoveOut - to co pokazałeś na obrazku także można uzyskać z listView; Wystarczy skorzystać z odpowiedniego stylu komponentu; Zobacz pod te linki:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb774735(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh850406.aspx

1

A nawet nie wiedziałem, ale to co podał @furious programming jest dla WF, tu masz WFP http://www.codeproject.com/Articles/18561/Custom-ListBox-Layout-in-WPF

0

@dam1an dzięki za link. Skorzystałem. W linku było pokazane na "window" ja używam "usercontrol", ale przystosowałem kod do mojego programu. Mimo że działa mam kilka problemów.

  1. Nie każdy drink ma swoje zdjęcie. W folderze gdzie trzymam obrazy, jest też obraz domyślny w przypadku gdy drink nie ma obrazu. Nie wiem jak zrobić żeby się wyświetlały tylko te które mają, a domyślny obrazek się nie wczytywał. Tutorial przedstawia tylko pokazywanie obrazków z folderu. Lista nie jest listą obiektów klasy w moim przypadku drink która przechowuje również inne informacje, nie wiem jak po kliknięciu na jednym z obrazków odwołać się do drinka który ma to właśnie zdjęcie.
    2)Mam błąd Błąd "Nie można odnaleźć części ścieżki „C:\Windows\system32\images\drinki”" choć zdjęcia się wyświetlają. A program działa
    3)W przykładowym programie po rozciąganiu okna zdjęcia ustawuały się obok siebie a u mnie już tak nie jest. Ale na razie to najmniej istotny problem

EDIT
Znalazłem też takie coś. http://www.dreamincode.net/forums/topic/261144-putting-items-in-listview-with-image-and-name/
Ale za chiny nie mogę code behind zrobić aby string z ścieżką zamieniało mi na obraz i go wyświetlało.

EDIT
Kolejny edit. Udało mi się zrobić że obiekty (ich nazwy, bo obrazków nie mogę wyświetlić) pojawiają się w "boxach" obok siebie. Użyłem do tego listboxa i wzorowałem się na linku wyżej. Wyszło nawet dobrze. Problem jest taki że nie mam dalej zdjęć no i wszystkie listboxy mi tak wyświetlają. W jednym oknie mam karty a w niektórych kartach mam inne listboxy. Jak zrobić żeby tylko w tym jednym listboxie się ustawiały obiekty w "boksach" a nie w wszystkich w oknie. Kod:

...
 <TabItem Header="Lista">
                <Grid Background="#FFE5E5E5">
                    <ListBox Name="lb_drinki" HorizontalAlignment="Left" VerticalAlignment="Top" Height="650" Width="1254" Margin="10,10,0,0" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid Margin="0,2">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="auto" />
                                        <RowDefinition Height="auto" />
                                    </Grid.RowDefinitions>
                                    <Image Grid.Row="0" Width="10" Height="10" Source="{Binding sciezka}"/>
                                    <TextBlock Grid.Row="1" Text="{Binding nazwa}" />
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Grid>
            </TabItem>

...
<UserControl.Resources>
        <Style TargetType="ListBox">
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <WrapPanel />
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
            </Style>
    </UserControl.Resources>

c058e161e2.png

0

Pokaż w jaki sposób wczytujesz te ścieżki do obrazków.

0

Znalazłem też takie coś. http://www.dreamincode.net/for[...]-listview-with-image-and-name/
Ale za chiny nie mogę code behind zrobić aby string z ścieżką zamieniało mi na obraz i go wyświetlało.

Tutaj podają ścieżki relatywne bo obrazki są częścią projektu.

Ty musisz zrobić coś takiego przykład jeśli nie ma obrazka wczytać domyślny:

public class Drink
   {
      private string _imageUrl;
      private readonly string _defaultPath = 
               System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) 
               + "\\images\\logo.jpg";
      
      public string Name { get; set; }
      public string ImageUrl
      {
         get { return _imageUrl ?? _defaultPath; }
         set { _imageUrl = value; }
      }
   }
0

Stworzyłem ręcznie nowy drink i podałem w nim ścieżkę absolutną i zdjęcie się wyświetla. Czy istnieje jakiś sposób aby listbox zmieniał ścieżkę z relatywnej na absolutną czy muszę zmienić ścieżki wszystkich drinków na ścieżki absolutne ?

0
string absolutePath = Directory.GetCurrentDirectory() + @"\MyImagesFolderInProjectDirectory\Image.jpg";
0

OK. Tutaj jest paczka 7zip http://1drv.ms/1BRRbep

1
public void wcz_listy()
        {
            lst_pDrinkow = (
                from drink in xml_drinki.Root.Elements("PRZEPIS")
                select new kDrink(
                    int.Parse(drink.Attribute("ID").Value),
                    drink.Element("NAZWA").Value,
                    drink.Element("SKLADNIKI").Value,
                    drink.Element("OPIS").Value, Directory.GetCurrentDirectory()+"\\"+
                    drink.Element("SCIEZKA").Value,
                    drink.Element("OCENA").Value,
                    bool.Parse(drink.Element("GIN").Value),
                    bool.Parse(drink.Element("RUM").Value),
                    bool.Parse(drink.Element("WODKA").Value),
                    bool.Parse(drink.Element("WHISKEY").Value),
                    bool.Parse(drink.Element("LIKKOK").Value),
                    bool.Parse(drink.Element("LIK").Value),
                    bool.Parse(drink.Element("INNE").Value)
                    )
                ).ToObservable<kDrink>();
            list_przepisow.ItemsSource = lst_pDrinkow;
            lb_drinki.ItemsSource = lst_pDrinkow;

        }

Zamień tą metodę ze swoją.

1 użytkowników online, w tym zalogowanych: 0, gości: 1