WPF ModernWindow przekazywanie obiektów

0

Witam,

Potrzebuje w miarę pilnie podpowiedzi może ktoś to wie, i ułatwi rozwiązanie dla skazanca ;)

Rzecz się ma jest MainWindow.xaml, w nim są deklaracje podstron:

 <mui:ModernWindow
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mui="http://firstfloorsoftware.com/ModernUI"
        xmlns:ProjektUI="clr-namespace:ProjektUI;assembly=ProjektUI"  
        xmlns:sns="clr-namespace:ProjektZal.Modules"
        x:Class="ProjektZal.MainWindow"
        Title="proj" IsTitleVisible="True"
        Icon="Resources/favicon.ico" Foreground="#FFFDF9F9" ContentSource="/Window/StartUp.xaml" >
    <mui:ModernWindow.MenuLinkGroups>
        <mui:LinkGroup DisplayName="Strona 1">
            <mui:LinkGroup.Links>
                <mui:Link  Source="/Window/Side1.xaml"/>
            </mui:LinkGroup.Links>
        </mui:LinkGroup>
        <mui:LinkGroup DisplayName="Strona 2">
            <mui:LinkGroup.Links>
                <mui:Link DisplayName="Podstrona 1"  Source="/Window/SubSide1.xaml" />
            </mui:LinkGroup.Links>
        </mui:LinkGroup>
    </mui:ModernWindow.MenuLinkGroups>
</mui:ModernWindow>

w pliku MainWindow.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;

using FirstFloor.ModernUI.Windows.Controls;

using ProjektZal.Modules;

namespace ProjektZal
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : ModernWindow
    {
        private int _a1;

        public int A1 { get; set; }
        public MainWindow(int li, string lf, string ll, int al)
        {
            InitializeComponent();
            this.WindowState = System.Windows.WindowState.Maximized;
        }

        public static ModernFrame frame { get; set; }

        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            frame = (ModernFrame)GetTemplateChild("ContentFrame");
        }
    }
}

i w czym kłopot: jak chce otworzyć podstronę SubSide1.xaml to chce przekazac MainWindow ale nie wiem jak ?

pozdrawiam

0

po co chcesz do sida przekazać MainWindow, może inaczej po co chcesz przekazywać do dziecka rodzica ? Rozumiem, że chcesz poziomu Side chcesz zarządzać np oknem głównym.

Stwórz sobie klasę np

public sealed class WindowsSettings
{
     private readonly static WindowsSettings instance = new WindowsSettings();

        public static WindowsSettings Window
        {
            get
            {
                return instance;
            }
        }

        private Window myMainWindow; // tutaj przechowujesz okno

         
        public Window GetThisWindow()
        {
            return myMainWindow;    // tutaj pobierasz okno
        }


        public void  SetWindow(Window myMainWindow) // inicjujesz okno
        {
            this.myMainWindow = myMainWindow;
        }



}

 

Wywołujesz to w MainWindow

 
public MainWindow()
        {
            InitializeComponent();
            WindowsSettings.Window.SetWindow(this);
        }   

Przykłady dodatkowych akcji do zarzadzanie położeniem wielkością

/// <summary>
        /// Zarzadza wielkością okna poprzez otrzymane parametry, 
        /// Wysokosc,Szerokosc, Dock(Right-Down/Left-Down/Right-Up/Left-Up/Deflaut : Right-Down)
        /// </summary>
        /// <param name="_Height">wysokosc</param>
        /// <param name="_Width">szerokosc </param>
        public void ChangeWindowSize(int _Height, int _Width, string _dock, bool litleHaid = false)
        {
            windowviewss.Height = _Height;
            windowviewss.Width = _Width;
            WindowsPozition(litleHaid,_Height, _Width, _dock);
        }

        /// <summary>
        /// Odpowiada za automatyczną pozycje okna na podstawie danych parametrów
        /// </summary>
        /// <param name="_Height">wysokosc</param>
        /// <param name="_Width">szerokosc</param>
        private void WindowsPozition(bool haid,int _Height, int _Width, string _dock)
        {
            /*
            Odpowiada za wszystkie okna sprawdza rozdzielczość oraz ustawia odpowiednie okno w tryb manualny
            */

            int haidPoint = 0;      // parametr ukrywający

            if (haid == true)       // jak ma być lekko schowany to go chowamy.
            {
                haidPoint = 140;
            }

            var desktopWorkingArea = System.Windows.SystemParameters.WorkArea;
            windowviewss.WindowStartupLocation = WindowStartupLocation.Manual;
            windowviewss.Topmost = true;



            switch (_dock)
            {
                case "Right-Down":         // Prawy dolny róg
                    windowviewss.Left = desktopWorkingArea.Right - _Width;
                    windowviewss.Top = desktopWorkingArea.Bottom - _Height + haidPoint;  // parametr zalezy ustawiajacy zmiane schowania panelu
                    break;

                case "Left-Down":         // Lewy dolny róg
                    windowviewss.Left = 1;
                    windowviewss.Top = desktopWorkingArea.Bottom - _Height;
                    break;

                case "Right-Up":         // Prawy górny róg
                    windowviewss.Left = desktopWorkingArea.Right - _Width;
                    windowviewss.Top = 1;
                    break;

                case "Left-Up":         // Prawy górny róg
                    windowviewss.Left = 1;
                    windowviewss.Top = 1;
                    break;


                default:                    // Prawy dolny róg
                    windowviewss.Left = desktopWorkingArea.Right - _Width;
                    windowviewss.Top = desktopWorkingArea.Bottom - _Height;
                    break;

            }

        } 
 

a tak ja wywołuje zmiane okna przy zmianie widoku

 
App_WindowsSettings.Window.WindowState.ChangeWindowSize(350, 840, "Right-Down");
0

Nie spodziewałem się aż tak obszernej odpowiedzi popartej przykładami. Wielkie dzięki. Jak jesteś gdzieś w Krk, to stawiam browar.
Co do celu przekazania okna rodzica w dół potrzebna jest mi ciągle aktywna jedna kontrolka... Raz zainicjowana i sobie działa.
Nie do końca jest to dobre rozwiązanie, ale jak nie umiesz inaczej korzystasz z z gorszych rozwiązań...

pozdrawiam serdecznie

0

dla tego nigdy w dol tylko do gory ;) inaczej page jest w window chcesz sie odwolac do window czasem faktycznie ciezko bez przygotowania sie nie da. Ale jest rozwiazanie jak klasy do zarzadzania i tam przezucasz takie elementy. Element window by moc zarzadzac z poziomu kazfej klasy oknem rozmiarem polozeniem titlem czy tez buzyboxem zdeklarowanym raz.

tak btw xd jak chcesz sie odwolac do kontrolki to przekaz kontrolke a nie okno xd

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