2012-11-20 4 views
4

J'ai un contrôle contextuel sur une page LayoutAware.Lier à Window.Current.Bounds.Width dans XAML

Ce que je veux vraiment, c'est que le popup remplisse l'écran.

Je pense que la solution est d'utiliser Window.Current.Bounds.Height/Width pour définir les propriétés respectives sur une grille à l'intérieur du contrôle contextuel.

Je ne souhaite pas utiliser le code derrière le fichier pour définir ces propriétés. Je voudrais pouvoir lier à Window.Current.Bounds.Height dans le XAML.

Puis-je faire ceci?

Y a-t-il une meilleure façon de créer un menu contextuel sur l'écran?

Répondre

5

Vous pouvez le faire en écrivant des convertisseurs pour la hauteur et la largeur.

public class WidthConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return Window.Current.Bounds.Width; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

public class HeightConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return Window.Current.Bounds.Height; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Ajouter dans votre section ressources page -

<common:WidthConverter x:Key="wc" /> 
    <common:HeightConverter x:Key="hc" /> 

Utilisez-les pour votre pop-up -

 <Popup x:Name="myPopup" > 
      <Grid Background="#FFE5E5E5" Height="{Binding Converter={StaticResource hc}}" Width="{Binding Converter={StaticResource wc}}" /> 
     </Popup> 
+0

J'ai fini par utiliser cette solution. @Typist Merci! – Robert

+1

Cela ne semble pas répondre à la modification de la taille de la page - Docking à gauche ou à droite, ou taille d'événement 2/3. – Nathan

4

Vous pouvez utiliser le convertisseur (voir dactylo) OU utiliser la classe statique.

Dans votre App.xaml:

<datamodel:Foo x:Name="FooClass" /> 
xmlns:datamodel="using:MyProject.Foo.DataModel" 

Et dans votre XAML:

Source="{Binding Source={StaticResource FooClass}, Path=Width}" 

où la largeur est une propriété dans votre classe qui reviennent Window.Current.Bounds.Width.

Exemple: public double Width{get{return Window.Current.Bounds.Width;}}

Cordialement.

+0

Ceci est une bonne solution aussi. Si je pouvais me voir en utilisant 5 ou 6 propriétés, j'aurais créé une classe statique à la place. @David Merci! – Robert

+0

@Robert Super. Pourquoi ne changeriez-vous pas avec cette solution si c'est mieux? – David

+0

J'utilise les convertisseurs dans mon projet en ce moment comme indiqué ci-dessus. C'est pourquoi j'ai marqué la réponse alternative comme réponse. Vos réponses et celles de Dactylo fonctionneraient dans mon cas. J'utilise le modèle MVVM dans mon application. Une troisième solution serait de le mettre comme une propriété de mon View Model. Je ne voulais pas avoir à le répliquer pour chaque modèle de vue. – Robert

Questions connexes