• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Tworzenie nowej sceny

0 głosów
285 wizyt
pytanie zadane 18 lutego 2017 w C# przez Yoshua Nowicjusz (200 p.)
Witam, dopiero uczę się programowania w C# i jestem w kropce, mianowicie chcę napisać kod aby poprzez kliknięcie na dany rectangle otworzyła się nowa scena ( coś jakby menu ) lecz nie mam najmniejszego pojęcia jak to zrobić, czytałem trochę o funkcji enum ale nie zbyt wiele mi to dało, mógłby ktoś z was mi lekko podpowiedzieć jak można coś takiego stworzyć ?

1 odpowiedź

0 głosów
odpowiedź 19 lutego 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)
Technolgia WPF czy Form?

Pozdrawiam :)
komentarz 19 lutego 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)

Jeżeli chodzi o WPF to pokaże Ci najprostrzy sposob, ale tak jak jest to tu pokazane, nikt raczej ni uzywa, poniewaz robi sie to poprzed userControle i MVVM. Niżej napisze jak to zrobic przez userControle i jak eventy wywolac.

 

PLIK XAML

<Window x:Class="WpfApplication1.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:WpfApplication1"
        mc:Ignorable="d"
        Title="Tutorial" Height="350" Width="525">
    <Grid>
        <Grid>
            <Rectangle x:Name="Retangle" Width="150" Height="150" Fill="Red" MouseDown="Retangle_MouseDown" Visibility="Visible"/>
        </Grid>

        <Grid x:Name="pnl" Visibility="Collapsed">
            <StackPanel>
                <Button Height="100" Width="200">
                    Button1
                </Button>
                <Button Height="100" Width="200">
                    Button2
                </Button>
                <Button Height="100" Width="200" Click="Button_Click">
                    Exit
                </Button>
            </StackPanel>
        </Grid>
    </Grid>
</Window>

PLIK XAML.CS

using System.Windows;
using System.Windows.Input;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Retangle.AddHandler(FrameworkElement.MouseDownEvent, new MouseButtonEventHandler(Retangle_MouseDown), true);
        }

        private void Retangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            openMenu();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            closeMenu();
        }

        private void openMenu()
        {
            pnl.Visibility = Visibility.Visible;
            Retangle.Visibility = Visibility.Collapsed;
        }

        private void closeMenu()
        {
            pnl.Visibility = Visibility.Collapsed;
            Retangle.Visibility = Visibility.Visible;
        }
    }
}

 

komentarz 19 lutego 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)

Tutaj masz rozwiazanie z usercontrolami i eventami :). Masz mniej wiecej pokazane jak działaja enumy w takich przypadkach :)

 

MainWindow XAML
 

<Window x:Class="WpfApplication1.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:WpfApplication1"
        mc:Ignorable="d"
        Title="Tutorial" Height="350" Width="525">
    <Grid>
        <Grid x:Name="pnlRetanle" Visibility="Visible">
            <local:retangle MenuButtonClick="retangle_MenuButtonClick"/>
        </Grid>
        <Grid x:Name="pnlMenu" Visibility="Collapsed">
            <local:menu MenuButtonClick="menu_MenuButtonClick"/>
        </Grid>
    </Grid>
</Window>


MainWindow.XAML.CS

using System.Windows;
using System.Windows.Input;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Retangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            openMenu();
        }

        private void openMenu()
        {
            pnlRetanle.Visibility = Visibility.Collapsed;
            pnlMenu.Visibility = Visibility.Visible;
        }

        private void closeMenu()
        {
            pnlRetanle.Visibility = Visibility.Visible;
            pnlMenu.Visibility = Visibility.Collapsed;
        }

        private void retangle_MenuButtonClick(object sender, System.EventArgs e)
        {
            openMenu();
        }

        private void menu_MenuButtonClick(object sender, menu.Buttons e)
        {
            if(e == menu.Buttons.exit)
                closeMenu();
        }
    }
}


Retagnle XAML

<UserControl x:Class="WpfApplication1.retangle"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Rectangle x:Name="Retangle" Width="150" Height="150" Fill="Red" MouseDown="Retangle_MouseDown" Visibility="Visible"/>
    </Grid>
</UserControl>


Retangle XAML CS
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for retangle.xaml
    /// </summary>
    public partial class retangle : UserControl
    {
        public delegate void MenuButtonClickEventHandler(object sender, EventArgs e);
        public event MenuButtonClickEventHandler MenuButtonClick;


        public retangle()
        {
            InitializeComponent();
        }

        private void Retangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            MenuButtonClick?.Invoke(this, new EventArgs());
        }
    }
}


MENU XAML
 

<UserControl x:Class="WpfApplication1.menu"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <StackPanel>
            <Button Height="100" Width="200">
                Button1
            </Button>
            <Button Height="100" Width="200">
                Button2
            </Button>
            <Button Height="100" Width="200" Click="Button_Click">
                Exit
            </Button>
        </StackPanel>
    </Grid>
</UserControl>

MENU XAML CS
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for menu.xaml
    /// </summary>
    public partial class menu : UserControl
    {
        public delegate void MenuButtonClickEventHandler(object sender, Buttons e);
        public event MenuButtonClickEventHandler MenuButtonClick;

        public enum Buttons
        {
            button1,
            button2,
            exit
        }
        public menu()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MenuButtonClick?.Invoke(this, Buttons.exit);
        }
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 728 wizyt
0 głosów
2 odpowiedzi 405 wizyt
pytanie zadane 21 czerwca 2017 w C# przez Yoshua Nowicjusz (200 p.)
0 głosów
1 odpowiedź 299 wizyt
pytanie zadane 14 kwietnia 2018 w C# przez Destroy3243 Nowicjusz (150 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...