Apro un nuovo post perchè sono b!s#!rdo dentro ed ho paura che continuando sul vecchio, nessuno mi dia più retta......


Ritorno sul problema di questi giorni :

un controlTemplate da applicare ad una, 10 , cento windows.

all'interno deo template, un sacco di personalizzazioni grafiche ma anche
e soprattutto 3 pulsanti (per semplicità) che mi simulino il comportamento
dei tre famosi di windows.
(Minimize, maximize e restore.)

COn mille peripezie sono riuscito a far arrivare gli eventi generati dai tre pulsanti, fino alla window cui è applicato il template.

sono rimasto soddisfatto per 5 minuti e poi mi si è spenta la luce !
mi son reso conto che per essere completo , il template dovrebbe essere corredato di una classe 'sua' che intrapppoli i funzionamenti di base.
(ok..i tre pulsanti fanno cose banali, che si possono risolvere agevolmente con un trigger....lo so)
Ma ipotizzando la presenza di un quarto pulsante che implementi lo spostamento della window (in giro per lo schermo), allora le cose si fanno più complicate.
La gestione del movimento , dovrebbe stare sempre e comunque con il template e non REPLICATA IN OGNI WINDOW CHE USA IL TEMPLATE.

Che fare?
Cristian mi ha suggerito di utilizzare uno stratagemma, ma non sono riuscito a farlo funzionare a dovere

1) ho creato un resource dictionary con all'interno la definizione del template
2) sull elemento root del dictionary ho aggiunto la definizione x:Class, specificando la classe da abbinargli.
3) ho creato il file contenente la classe, ereditando da controlTemplate

purtroppo template e classe, non si cacano neanche di striscio.
Allora ho cercato in giro per la rete ed ho trovato una soluzione che mi sembrava carina:
definito il template in xaml

nel codice ho provato ad usare il metodo FindName della classe ControlTemplate
nessun risultato, la findname mi tornava sempre null .
io spervo che la findanme mi tornasse l'oggetto 'button' (uno a caso dei tre)
ma nulla da fare.


SOPRAVVIVERO' LO STESSO... MA SE NON RISOLVO NON SONO CONTENTO
CIAOOOOOOOOOOO
Sì ma non avevo capito che ti serviva per questo. Per prima cosa non usare gli eventi ma i Command dove possibile.
Poi, come lo usi il template?

Ciao

Il mio blog
Homepage
scusa se abuso della tua disponibilità,
ti mando via mail il codice...è cortissimo.

in linea di massima il template mi serve proprio per influenzare lo stile della finestra e per poterla usare senza i 3 bottoni windows.
quindi devo intercettare gli eventi per spostarla e per chiuderla.

se non ci sono soluzioni per incapsulare il codice del template, proverò con un
un custom control.
però mi piacerebbe essere sicuro che non ci sono altre possibilità.
in fin dei conti mi sembra una richiesta legittima quella di "blindare" certi comportamenti, senza obbligare l'utente a gestire command o eventi
per ogni finestra che apre.

ciao.
p.s : quando vuoi , possiamo parlare anche degli script.

ale
Non hai seguito le indicazioni che t'avevo dato
Il codebehind di può applicare a qualsiasi file xaml. Occorre specificare l'attributo x:Class. Prendi le finestre come riferimento. Fai un file maniaRes.xaml.cs relativo a maniaRes.xaml (il nome in realtà non conta ma è per essere più ordinati e definisci una classe con nome, namespace e partial, altrimenti non può unire:
public partial class alb    {
        public alb ()
        {
        }

        void rect_Click(object s, EventArgs e)
        {
        }
    }


Nel file xaml poi lo usi con x:Class="namespace.classe" e vedrai che va e puoi intercettare gli eventi.
Ti consiglio inoltre di non disegnare solalmente ma di individuare le funzioni logiche e poi cambiarne l'aspetto. Per esempio la x di chiusura è un pulsante. Metti quindi un button e poi cambiene l'aspetto. In questo modo hai l'evento di click e hai la possibilità di usare i Command che io caldamente ti consiglio.

Per ultimo, meglio se posti il codice qua sopra (il più ristretto possibile) in modo che anche altri possano capire il problema

Ciao

Il mio blog
Homepage

SONO UN ASINO : hai ragione!

avevo provato a seguire le tue indicazioni ma l'ho fatto in maniera parziale.
NON ho la certezza matematica ma ho individuato 2 possibili errori :

1) nell'attributo x:Class mettevo solo il nome della classe, tralasciando il namespace

2) mi incapponivo a voler derivare la classe da ControlTemplate.



Ora ho fatto la prova e funziona tutto.

GRAZIE 1000 (è BELLO sapere che c'è qualcuno che ti toglie le castagne dal fuoco!)


ADESSO MI BUTTO SUI COMMAND.
CIAO

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.