ярлык не показывает фото из класса - WPF - PullRequest
0 голосов
/ 01 мая 2020

пожалуйста, дайте мне руку! У меня есть один простой проект WPF, который не показывает изображение. я борюсь с этим с одной недели, не могу найти свою ошибку! Я посмотрел много решений на этом сайте, но все равно мне не помогло!

C# Код из окна дисплея

 public partial class Boatdetails : Window
    {

        //public Boatdetails()
        public Boatdetails(Object boot)
        {
            InitializeComponent();

            if (boot is Ruderboot)
            {
                modell.Content = ((Ruderboot)boot).Modell;
                plaetze.Content = ((Ruderboot)boot).Plaetze;
                preis.Content = ((Ruderboot)boot).Preis;
                bild.Content = ((Ruderboot)boot).Image;
                HoheStack.Visibility = Visibility.Hidden;
                MoroStack.Visibility = Visibility.Hidden;
            }
            else if (boot is Segelboote)
            {
                modell.Content = ((Segelboote)boot).Modell;
                plaetze.Content = ((Segelboote)boot).Plaetze;
                preis.Content = ((Segelboote)boot).Preis;
                bild.Content = ((Segelboote)boot).Image;
                hohe.Content = ((Segelboote)boot).Height;
                HoheStack.Visibility = Visibility.Visible;
                MoroStack.Visibility = Visibility.Hidden;
            }
            else
            {
                modell.Content = ((Motorboot)boot).Modell;
                plaetze.Content = ((Motorboot)boot).Plaetze;
                preis.Content = ((Motorboot)boot).Preis;
                bild.Content = ((Motorboot)boot).Image;
                motorModel.Content = ((Motorboot)boot).MotorModel;
                motoLeistung.Content = ((Motorboot)boot).EnginePerformence;
                HoheStack.Visibility = Visibility.Hidden;
                MoroStack.Visibility = Visibility.Visible;
            }


            BitmapImage jpg = new BitmapImage(new Uri(((Boote)boot).Image, UriKind.Relative)); //Bild setzten, relativ im ordner images
            Image img = new Image();
            img.Source = jpg;
            bild.Content = img; 

        }


        private void showDetails(object detail)  
        {

                spDetail.Height = 27; 
                lblDetails.Visibility = System.Windows.Visibility.Visible; 
                details.Visibility = System.Windows.Visibility.Visible;

        }
    }

и XML Код окна

 <StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="Bild:" Width="100"/>
            <Label x:Name="bild" Width="200" Height="200"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="Modell:" Width="100"/>
            <Label x:Name="modell" />
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="Plätze:" Width="100"/>
            <Label x:Name="plaetze" />
        </StackPanel>
        <StackPanel x:Name="spDetail" Orientation="Horizontal" Height="0">
            <Label x:Name="lblDetails" Content="Details:" Width="100" Visibility="Hidden"/>
            <Label x:Name="details" Visibility="Hidden"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="Preis:" Width="100"/>
            <Label x:Name="preis" />
        </StackPanel>
        <StackPanel Orientation="Horizontal"
                    Name="HoheStack"
                    Visibility="Visible">
            <Label Content="Hohe:" Width="100"/>
            <Label x:Name="hohe" />
        </StackPanel>
        <StackPanel x:Name="MoroStack"
                    Visibility="Visible">
            <StackPanel Orientation="Horizontal" 
                    Visibility="Visible">
                <Label Content="Moto Modell:" Width="100"/>
                <Label x:Name="motorModel" />
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <Label Content="Leistung" Width="100"/>
                <Label x:Name="motoLeistung" />
            </StackPanel>
        </StackPanel>

    </StackPanel>

вот как я добавил объект в класс:

 rl.Add(new Ruderboot() { Modell = "XLight", Plaetze = 1, Preis = 3400, Image = "./Images/ruderboot1.jpg" });

и мой класс

 public class Boote
    {
        public string Modell { get; set; }
        public sbyte Plaetze { get; set; }
        public float Preis { get; set; }
        public string Image { get; set; }

        public override string ToString()
        {
            return Modell + ": "+ Preis+"€";
        }
    }

1 Ответ

0 голосов
/ 01 мая 2020

Установите для параметра «Действие сборки» файлов изображений в вашем проекте значение Resource (Обозреватель решений -> Контекстное меню -> Свойства) и загрузите их с помощью URI-файлов пакета ресурсов , например

Image = "pack://application:,,,/Images/ruderboot1.jpg"

Кроме того, вы должны использовать привязку данных. Присвойте переданный объект «лодка» объекту DataContext окна:

public Boatdetails(Object boot)
{
    DataContext = boot;
    InitializeComponent();
}

. В XAML просто напишите выражения типа

<TextBlock Text="{Binding Modell}"/>
<Image Source="{Binding Image}"/>

, где в последнем случае преобразование из string в ImageSource автоматически выполняется платформой.


Вы можете использовать один ContentControl с различными шаблонами данных для разных типов лодок, например

<Window x:Class="BoatdetailsTest.Boatdetails" ...>
    <Window.Resources>
        <DataTemplate DataType="{x:Type local:Ruderboot}">
            <StackPanel>
                <!-- elements for Ruderboot -->
            </StackPanel>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Segelboot}">
            <StackPanel>
                <!-- elements for Segelboot -->
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ContentControl Content="{Binding}"/>
    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...