Avatar
Skelag
Člen
Avatar
Skelag:

Ahoj, nedávno jsem dělal takový "projektík" a zasekl jsem se když jsem potřeboval aby se obrázek posunul na druhou stranu obrazovky. Dlouho jsem prohledával google ale nikde jsem nenašel žádný návod který by jsem pochopil.
Nevěděl by někdo jak na to? :) (v code behind)

 
Odpovědět 2.3.2015 15:30
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Skelag
Jan Vargovský:

Canvas a vlastnosti Left a Top.

 
Nahoru Odpovědět 2.3.2015 16:20
Avatar
Skelag
Člen
Avatar
Odpovídá na Jan Vargovský
Skelag:

Mohl by jsi mi dát nějaký konkrétnější příklad jak to napsat? Třeba když chci posunout obrázek picture1 o 20 pixelů doleva?

Editováno 2.3.2015 16:32
 
Nahoru Odpovědět 2.3.2015 16:30
Avatar
Odpovídá na Skelag
Štefan Pružinský:

Pozri, vo XAML máš:

<Image x:Name="obrazok1" HorizontalAlignment="Left" Height="100" Margin="25,118,0,0" VerticalAlignment="Top" Width="100" Source="C:\Users\Example\Desktop\image.jpg"/>

Do code behind napíšeš napríklad (samozrejme až za InitializeCom­ponent()):

obrazok1.Margin = new Thickness(125, 122, 0, 0);

Všimni si, že som zväčšil odsadenie zľava o 100.

Editováno 2.3.2015 17:03
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 2.3.2015 17:02
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Skelag
Štefan Pružinský:

Ešte doplním, že Thickness funguje takto:

Thickness(left, top, right, bottom);

čiže zľava, zhora, zprava, zdola.

Nahoru Odpovědět 2.3.2015 17:09
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Skelag
Člen
Avatar
 
Nahoru Odpovědět  +1 2.3.2015 17:18
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Skelag
Jan Vargovský:
const int step = 5;
Canvas canvas = new Canvas();
Image image = new Image()
{
    Source = new BitmapImage(new Uri("path"))
};
canvas.Children.Add(image);
Content = canvas;
Canvas.SetLeft(image, 0);
Canvas.SetTop(image, 0);
KeyDown += (o, e) =>
    {
        //Debug.WriteLine("[{0},{1}]", Canvas.GetLeft(image), Canvas.GetTop(image));
        if (e.Key == Key.Left)
            Canvas.SetLeft(image, Canvas.GetLeft(image) - step);
        else if (e.Key == Key.Right)
            Canvas.SetLeft(image, Canvas.GetLeft(image) + step);
        else if (e.Key == Key.Up)
            Canvas.SetTop(image, Canvas.GetTop(image) - step);
        else if (e.Key == Key.Down)
            Canvas.SetTop(image, Canvas.GetTop(image) + step);
    };
 
Nahoru Odpovědět  +1 2.3.2015 17:25
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Skelag
Jan Vargovský:

Způsob od kolegy bych raději nepoužíval. Záleží jak přesně se to má chovat při resizování toho okna, resp. containeru ve kterém je ten obrázek. Rozhodně bych to ale nedělal přes margin.

 
Nahoru Odpovědět  +1 2.3.2015 17:36
Avatar
Nahoru Odpovědět 2.3.2015 17:42
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Skelag
Jan Vargovský:

Jestli bys to pak chtěl předělat do XAMLu, tak dáš normálně canvas a do něj ten Image, na tom ale nesmíš zapomenout nastavit tzv. Attached property Left a Top (resp. Canvas.Left a Canvas.Top) na nějakou hodnotu, protože defaultně je NaN (Not a Number), což se tváří jako Left & Top s hodnotou 0.

Štefan Pružinský Neříkám, že tvůj způsob je úplně špatný, ale nevím jestli bych chtěl, že se mi obrázek zdeformuje při změnění velikosti panelu.

Editováno 2.3.2015 17:55
 
Nahoru Odpovědět 2.3.2015 17:53
Avatar
Skelag
Člen
Avatar
Odpovídá na Jan Vargovský
Skelag:

Zní to složitě ale naštěstí to do XAMLu zatím předělávat nehodlám :)

 
Nahoru Odpovědět 2.3.2015 18:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.