Diskuze: Z WindowsForm na WPF

C# .NET .NET (C# a Visual Basic) Z WindowsForm na WPF American English version English version

Avatar
HONZ4
Člen
Avatar
HONZ4:

Ahoj. Učím se používat WPF.
Chci "zoomovat" formulář, který ve WF vypadá jako na přiloženém obrázku. Chci aby se při změně velikosti zachoval poměr pozic prvků na formuláři a přirozeně se měnila i velikost písma. Zkrátka taková lupa.

Já jsem to zkoušel různými způsoby, ale nedaří se mi to.

Moc by mi pomohlo, kdyby mi někdo vytvořil kompletní formulář jako je na obrázku v XAMLu, abych z něj pochopil jak na to.

 
Odpovědět 17. listopadu 18:47
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na HONZ4
Lukas C#:

Hoď jsem obrázek před a po zvětšení. Nevím, jak přesně to zvětšování myslíš.

 
Nahoru Odpovědět 17. listopadu 19:55
Avatar
HONZ4
Člen
Avatar
 
Nahoru Odpovědět 17. listopadu 20:43
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na HONZ4
Lukas C#:

Zkus LayoutTransform: Všechny ty kontrolky budeš mít v nějakém Gridu/DockPanelu. Na tento top panel aplikuj LayoutTransform se zvětšením.

 
Nahoru Odpovědět 17. listopadu 20:49
Avatar
HONZ4
Člen
Avatar
Odpovídá na Lukas C#
HONZ4:

já právě nevím jak na ten rozestup mezi kontrolkami + jak s písmem.
Já už jsem na netu našel několik ukázek, ale většinou na nějakém tom panelu řazeno horizontálně/ver­tikálně, ale to se mě nehodí, já potřebuji mít kontrolky (ve výsledku jich tam bude mnohem víc) umístěny určitým způsobem a toto rozložení zachovat (z důvodu logiky aplikace). Takže by se na to hodil spíš nějaký ten grid, ale u něj nevím jak měnit rozestup na základě zvětšení.

ps.: tu horizontální mezeru mezi pictureboxem a textboxy jsem v náhledu trochu pokazil. Jak ta se bude chovat není důležité, ale raději když bude pořád stejná

 
Nahoru Odpovědět 17. listopadu 21:06
Avatar
HONZ4
Člen
Avatar
HONZ4:

sakra ten čas na editaci příspěvku je tu k ničemu!

ve skutečnosti by se asi mezery (rozestup) sousedních kontrolek měnit neměly. Zvětšují se pouze kontrolky, jejich písmo + panel na kterém leží a velikost písma spodního listboxu.

 
Nahoru Odpovědět 17. listopadu 21:14
Avatar
HONZ4
Člen
Avatar
HONZ4:

tady ten borec to má jak bych to chtěl. Mám na mysli tento náhled.
Ale zdroják tam má jen k té jednoduché aplikaci (tak to nechci) a já nevím jak to použít pro můj případ.

 
Nahoru Odpovědět 17. listopadu 21:41
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na HONZ4
Lukas C#:

Tady je primitivní XAML s jedním Buttonem - je to řešené přes Binding:

<Window x:Class="Transform.MainWindow"
        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:Transform"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <ScaleTransform x:Key="scale" ScaleX="{Binding ElementName=X, Path=Value}" ScaleY="{Binding ElementName=Y, Path=Value}">

        </ScaleTransform>
    </Window.Resources>

    <StackPanel>
        <Slider Name="X" Minimum="0.1" Maximum="3">

        </Slider>
        <Slider Name="Y" Minimum="0.1" Maximum="3">

        </Slider>


        <Button Width="100" Height="40" LayoutTransform="{StaticResource scale}">Button
        </Button>
    </StackPanel>
</Window>
 
Nahoru Odpovědět  +1 17. listopadu 22:04
Avatar
HONZ4
Člen
Avatar
Odpovídá na Lukas C#
HONZ4:

Díky moc za jednoduchost.
Mohl bych poprosit o doplnění ještě jednoho buttonu vedle toho stávajícího? Ať vím jak vyřešit rozestup kontrolek.

 
Nahoru Odpovědět 17. listopadu 22:21
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na HONZ4
Lukas C#:

Prostě ho tam přidáš (a nastavíš mu nějaký pevný Margin, aby měly mezi sebou nějakou mezeru). Transformuješ pouze Button, mezery zůstanou stejné.

 
Nahoru Odpovědět 17. listopadu 22:49
Avatar
HONZ4
Člen
Avatar
Odpovídá na Lukas C#
HONZ4:

Jasně chápu, ale ještě nevím jak to skládat za a pod sebe. Do StackPanelu se právě dají umístit kontrolky buď horizontálně nebo vertikálně za sebe.

 
Nahoru Odpovědět 17. listopadu 22:59
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na HONZ4
Lukas C#:

Aha, a není divné snažit se implementovat zvětšování aplikace a přitom neznat elementární WPF věci, jako Grid, DockPanel, a StackPanel? Fóra jsou od toho, aby ti na nich poradili s kombinovanými nebo komplexními problémy. Nechce se mi sem přepisovat něco, co je v každém WPF tutoriálu na Internetu.

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition ></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Slider Grid.ColumnSpan="2" Name="X" Minimum="0.1" Maximum="3">

        </Slider>
        <Slider Grid.ColumnSpan="2" Grid.Row="1" Name="Y" Minimum="0.1" Maximum="3">

        </Slider>


        <Button Grid.Row="2" Margin="4" Width="100" Height="40" LayoutTransform="{StaticResource scale}">Button
        </Button>
        <Button Margin="4" Grid.Column="1" Grid.Row="2" Width="100" Height="40" LayoutTransform="{StaticResource scale}">Button
        </Button>
    </Grid>
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 17. listopadu 23:09
Avatar
Odpovídá na HONZ4
Michal Štěpánek:

A co přesně nechápeš? Když StackPanelu nastavíš

orientation="Horizontal"

Budou se kontrolky řadit vedle sebe, jinak je implicitně nastaveno řazení pod sebe. StackPanelů si můžeš dát kolik chceš, pokud to chceš mít "tabulkově" souměrně, použij Grid. Do jednotlivých buněk můžeš zase dávat stackpanely, nebo jiné kontejnery...

Nahoru Odpovědět 17. listopadu 23:10
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
HONZ4
Člen
Avatar
Odpovídá na Michal Štěpánek
HONZ4:

no právě to sázet do sebe hromadu panelů mě přišlo, že s toho bude hrozná maštal :)

 
Nahoru Odpovědět 17. listopadu 23:23
Avatar
HONZ4
Člen
Avatar
Odpovídá na Lukas C#
HONZ4:

tohle je aplikace první wpf co chci dělat, právě proto, že potřebuji předělat jednu WF kvůli zoomování. Tak se rovnou zajímám i o pokročilejší metody. Každopádně díky moc za pomoc. Prozatím vím, vše co jsem potřeboval.

 
Nahoru Odpovědět 17. listopadu 23:27
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 15 zpráv z 15.