26 messaggi dal 22 dicembre 2011
Salve, sto disegnando su una topmost semitransparent window, volevo disegnare rettangoli il cui il background è completamente trasparente.
Ho provato così

rec.Fill = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255));
canvas.Children.Add(rec);

ma non funziona. Come posso fare?
108 messaggi dal 09 novembre 2005
In che senso "ma non funziona." ? Ti da un colore tinta unita? Oppure ti da un errore?

Comunque vedo che aggiungi un Rectangle in un Canvas, ma lo sfondo del canvas?

Qual'é il tuo obiettivo finale?
26 messaggi dal 22 dicembre 2011
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ServerApp.RWindow" x:Name="MWindow" AllowsTransparency="True" WindowStyle="None" Topmost="True" Background="Transparent"  ResizeMode="NoResize"  WindowState="Maximized"  SnapsToDevicePixels="True">     
<Canvas x:Name="MyCanvas" Background="#AA000000">     
<Rectangle Fill="#02000000" Height="119" Canvas.Left="216" Stroke="Red" Canvas.Top="117" Width="346"/>     
</Canvas>
<Window>


In sostanza voglio che il rettangolo sia molto più trasparente del canvas. Ossi voglio creare una sorta di "botola" che mi permetta di vedere al di sotto. Non so se sono stato chiaro, comunque allego una foto di ciò che vorrei ottenere:

http://imageshack.us/photo/my-images/337/85400880.jpg/
108 messaggi dal 09 novembre 2005
Eh no, riepilogo se ho capito quello che vuoi fare:

- livello 0 (più basso): l'immagine di qualcosa
- livello 1 (sopra al livello 0): un rettangolo in semitrasparenza che opacizza l'immagine
- livello 2 (sopra al livello 1): che "apra una finestra" sul livello 1, annullando in un certo riquadro, di fatto, il livello 1, magari portando la trasparenza del livello 1 a 100%, ma solo in corrispondenza del riquadro del livello 2.

Mi sa che non si può fare.

Per risolvere il problema, puoi creare la tua "maschera" con 3 rettangolo, composti insieme.

Potresti creare una sorta di maschera costruendola con diversi rettangoli, poi da codice potrai fare l'engine che passato un rectangle, lui calcola i 4 rettangoli necessari per generare l'effetto maschera.

<Canvas Grid.ColumnSpan="3" Grid.RowSpan="3">
<Canvas.Background>
   <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
      <GradientStop Color="Red" Offset="0.142" />
      <GradientStop Color="White" Offset="1" />
      <GradientStop Color="#FFB8FF47" Offset="0.449" />
      <GradientStop Color="#FFA0A0FF" Offset="0.756" />
   </LinearGradientBrush>
</Canvas.Background>
<Rectangle Canvas.Left="0" Canvas.Top="0" Width="197" Height="480" Name="rectangle1"  StrokeThickness="0" Fill="#76797979" />
<Rectangle Canvas.Left="428" Canvas.Top="0" Fill="#76797979" Height="480" Name="rectangle2" StrokeThickness="0" Width="212" />
<Rectangle Canvas.Left="197" Canvas.Top="307" Fill="#76797979" Height="173" Name="rectangle3" StrokeThickness="0" Width="231" />
<Rectangle Canvas.Left="197" Canvas.Top="0" Fill="#76797979" Height="173" Name="rectangle4" StrokeThickness="0" Width="231" />

</Canvas>


Incolta questo XAML in una pagina, così da vedere cosa intendo come risultato finale.

Non so se può essere una soluzione nel contesto in cui ti trovi.
26 messaggi dal 22 dicembre 2011
Si togliendo il background al Canvas che deve essere trasparente, è proprio l'effetto che voglio ottenere, cioè aprire un "buco" su tutto ciò che c'è al di sotto.

Il problema è che la posizione del "buco"(rettangolo) è generata a runtime quindi serve un sistema per calcolare gli altri rettangoli per opacizzare tutto il resto.
108 messaggi dal 09 novembre 2005
Si puoi farlo!

Immagina una funzione che restituisce un array di 4 Rectangle e come parametro gli devi passare un Rectangle (che è il buco).

Ora oltre al "Buco" devi passare anche la dimensione del Canvas.

All'interno della funzione fai pochi calcoli per definire i 4 rettangoli.
5.610 messaggi dal 09 febbraio 2002
Contributi
Scusate se mi intrufolo nella conversazione... forse si potrebbero usare dei GridSplitter? Grid 3x3 in cui solo la cella centrale è trasparente e in essa mettere 4 GridSplitter, ognuno sul proprio lato. Così l'utente ha già la funzionalità di ridimensionamento e non è necessario ricalcolare le dimensioni delle altre porzioni semitrasparenti.

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
108 messaggi dal 09 novembre 2005
Bella idea! Dipende da qual'é l'obiettivo finale di pippo87...

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.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC