Otwieranie nowego okna z obrazem

0

Witam, mam aplikację w której używam obrazów i chciałbym je móc przybliżać, wymyśliłem sobie że jak kliknę na obraz to on otworzy się w nowym oknie. Problem tylko w tym że nie wiem jak to zrobić, robię to w WPF i stanąłem na tym

<Viewbox HorizontalAlignment="Left" Height="279" Margin="378,28,0,0" VerticalAlignment="Top" Width="344" >
                    <Button Click="ExpandImage">
                        <Image Source="images/szaretlo.jpg" Height="350" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="mapakierunkow" />
                    </Button>
                </Viewbox>
public void ExpandImage(object sender,EventArgs e)
        {
            Window Application1 = new Window();
            
            Application1.Show();
        }

Nie wiem jak dobrać się do zdjęcia które jest wewnątrz buttonu, jak ktoś ma pomysł to z góry dzięki za pomoc. I mam jeszcze jedno pytanie czy ten wpf jest w ogóle sensownym narzędziem, bo strasznie się przy nim męczę i wydaje mi się że strasznie utrudnia proste rzeczy, wiem że teraz apek desktopowych robi się mało ale chciałbym mieć jakieś narzędzie na wszelką ewentualność i nie wiem czy to jest sensowne.

0

Twój Image wewnątrz Buttona ma nazwę, więc dostać się do niego możesz bez problemu. Aby przekazać jego źródło obrazka do innego okna najprościej ci to będzie zrobić w konstruktorze nowego okna.

Stwórz klasę nowego okna, np. BigWindow, w którym będziesz miał obrazek:

<Window x:Class="WpfApp1.BigWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="BigWindow1" Height="450" Width="800">
    <Grid>
        <Image x:Name="obrazek" />
    </Grid>
</Window>

Dodaj w konstruktorze tej klasy możliwość przekazania parametru:

public partial class BigWindow : Window
{
    public BigWindow(ImageSource source)
    {
        InitializeComponent();

        obrazek.Source = source;
    }
}

I w obsłudze kliknięcia twórz nowy obiekt klasy BigWindow (a nie Window) i przekazuj mu Image.Source twojego obrazka:

public void ExpandImage(object sender, EventArgs e)
{
    var okno = new BigWindow(mapakierunkow.Source);
    okno.Show();
}

I mam jeszcze jedno pytanie czy ten wpf jest w ogóle sensownym narzędziem, bo strasznie się przy nim męczę i wydaje mi się że strasznie utrudnia proste rzeczy, wiem że teraz apek desktopowych robi się mało ale chciałbym mieć jakieś narzędzie na wszelką ewentualność i nie wiem czy to jest sensowne.

Tak, jest sensowny. Siłę WPF-a zobaczysz tak naprawdę, kiedy ogarniesz mechanizmy Data Binding i ew. wzorzec projektowy MVVM, bo wtedy się okazuje, że jest dość łatwo robić nawet bardzo skomplikowane rzeczy, tylko trzeba przełączyć się z myślenia o kontrolkach na myślenie o danych.

0

Dzięki za odpowiedź bardzo dobra tylko czy nie da się tego zrobić w jakiś bardziej uniwersalny sposób, ponieważ mam takich buttonów ze zdjęciem więcej a trochę bez sensu jest robić osobną metodę dla każdego okna

0

A w jaki sposób definiujesz obrazy na przyciskach?

0
hipekk napisał(a):

A w jaki sposób definiujesz obrazy na przyciskach?

Tak jak w kodzie powyżej.

1

Odnieś się do parametru "sender" metody obsługującej kliknięcie, a stamtąd musisz się dostać do jego "Content", czyli do obrazka właśnie. Taką metodę możesz potem podpiąć do każdego ze swoich przycisków zawierających obrazki.

public void ExpandImage(object sender, EventArgs e)
{
    var source = ((sender as Button).Content as Image).Source;

    var okno = new BigWindow(source);
    okno.Show();
}
0

Rewelacja wielkie dzięki!!!

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