2015-08-03 3 views
0

J'ai besoin que si ma fenêtre pop-up apparaît (après clic), la luminosité de la fenêtre principale doit diminuer, peut-être quelqu'un sait comment le faire?WPF. si la fenêtre pop-up apparaît, la luminosité de la fenêtre principale diminue // code-behind

Exemple: enter image description here

EDIT: Je crée la toile, mais ne sais pas comment l'utiliser, la luminosité doit diminuer puis pop up apparaît.

code:

private void sample_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

      string path1 = System.AppDomain.CurrentDomain.BaseDirectory + "../../loader_bg.png"; 
      string path2 = System.AppDomain.CurrentDomain.BaseDirectory + "../../loader.gif"; 

      ImageBrush myBrush = new ImageBrush(); 
      Image image = new Image(); 
      image.Source = new BitmapImage(
       new Uri(path1)); 
      myBrush.ImageSource = image.Source; 

      Image ima = new Image(); 
      MediaElement gif = new MediaElement(); 

      ima.Source = new BitmapImage(new Uri(path1)); 
      gif.Source=new Uri(path2); 

      gif.Height = 72; 
      gif.Width = 72; 

      var pop = new Popup 
      { 
       IsOpen = true, 
       StaysOpen = false, 
       AllowsTransparency = true, 
       VerticalOffset = 350, 
       HorizontalOffset = 700, 
       Height = 128, 
       Width = 128, 

      }; 
      Canvas c=new Canvas(); 
      c.Background=Brushes.Black; 
      c.Opacity = 0.6; 


      Grid p = new Grid(); 
      p.Background = myBrush; 

      //p.Children.Add(ima); 
      //p.Children.Add(c); 
      p.Children.Add(gif); 
      pop.Child = p; 


     } 
    } 

EDIT 2: J'ai la même question que mon code est le changement. Maintenant, j'ai créé un nouveau xaml.cs pour la fenêtre pop-up, et j'essaie d'atteindre le même but, mais je ne comprends pas la même chose (je parle de la diminution de la luminosité). Son mon nouveau xaml.cs:

namespace uploader 
{ 
    /// <summary> 
    /// Interaction logic for PopupPanel.xaml 
    /// </summary> 
    public partial class PopupPanel : UserControl 
    { 
     private Popup _currentPopup; 
     public PopupPanel() 
     { 
      InitializeComponent(); 

      string path1 = System.AppDomain.CurrentDomain.BaseDirectory + "../../loader_bg.png"; 
      string path2 = System.AppDomain.CurrentDomain.BaseDirectory + "../../loader.gif"; 

      ImageBrush myBrush = new ImageBrush(); 
      Image image = new Image(); 
      image.Source = new BitmapImage(new Uri(path1)); 
      myBrush.ImageSource = image.Source; 


      MediaElement gif = new MediaElement(); 

      gif.Source=new Uri(path2); 

      gif.Height = 72; 
      gif.Width = 72; 

      _currentPopup = new Popup 
      { 

       StaysOpen = false, 
       AllowsTransparency = true, 
       VerticalOffset = 350, 
       HorizontalOffset = 700, 
       Height = 128, 
       Width = 128, 

      }; 
      Overlay.Visibility = Visibility.Visible; 

      _currentPopup.Closed += PopupClosing; 
      _currentPopup.IsOpen = true; 

      Grid p = new Grid(); 
      p.Background = myBrush; 
      p.Children.Add(gif); 

      _currentPopup.Child = p; 

     } 
     private void PopupClosing(object sender, EventArgs e) 
     { 
      _currentPopup.Closed -= PopupClosing; 
      _currentPopup = null; 

      Overlay.Visibility = Visibility.Collapsed; 
     } 
    } 
} 

Mon Mainwindow.xaml.cs:

namespace uploader 
{ 

    public partial class MainWindow : Window 
    { 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
     private void sample_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      PopupPanel pop = new PopupPanel(); 
     } 
... 

Répondre

0

En utilisant votre code actuel, vous devrez gérer la visibilité de la superposition Canvas.

Il est plus facile de l'avoir défini dans votre XAML comme indiqué ci-dessous:

<Window> 
    <Grid> 
     <!--Main content--> 
     <UserControl/> 
     <Grid> 
      <Canvas x:Name="Overlay" 
        Background="Black" 
        Opacity="0.6" 
        Visibility="Collapsed"/> 
      <!--Overlay content--> 
      <UserControl VerticalAlignment="Center" HorizontalAlignment="Center"/> 
     </Grid>   
    </Grid> 
</Window> 

Ensuite, dans votre code-behind vous pouvez définir la visibilité avant le menu contextuel ouvre, et quand il se ferme:

Popup _currentPopup; 

private void sample_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ... 

    _currentPopup = new Popup 
    { 
     StaysOpen = false, 
     AllowsTransparency = true, 
     VerticalOffset = 350, 
     HorizontalOffset = 700, 
     Height = 128, 
     Width = 128 
    }; 

    Overlay.Visibility = Visibility.Visible; 

    _currentPopup.Closed += PopupClosing; 
    _currentPopup.IsOpen = true; 

} 

private void PopupClosing(object sender, EventArgs e) 
{ 
    _currentPopup.Closed -= PopupClosing; 
    _currentPopup = null; 

    Overlay.Visibility = Visibility.Collapsed; 
} 

Notez que j'utilise une variable locale pour conserver une référence à la fenêtre contextuelle. Ceci est pour que je puisse désabonner de l'événement Closing (aide à prévenir les fuites de mémoire)

+1

Merci beaucoup :) – LTU

+0

Je change mon code et ce code ne marche plus, je crée un nouveau xaml.cs pour une fenêtre popup , et il apparaît, mais il ne diminue pas la luminosité. Je modifie mon post (EDIT 2), peut-être savez-vous comment le réparer? – LTU

1

Je le fais dans toutes mes applications WPF en utilisant une toile avec fond noir et l'opacité

Exemple:

<Window> 
    <Grid> 
     <!--Main content--> 
     <UserControl/> 
     <Grid> 
      <Canvas Background="Black" Opacity="0.6"/> 
      <!--Overlay content--> 
      <UserControl VerticalAlignment="Center" HorizontalAlignment="Center"/> 
     </Grid>   
    </Grid> 
</Window>