2010-10-21 23 views
2

this is my simple try-it application qui crée une grille avec 2 lignes. La hauteur de la première rangée est liée à une propriété. La valeur que je lui ai assignée ne fonctionne qu'à l'exécution. J'ai essayé de le faire fonctionner aussi quand le temps de conception mais j'ai échoué à faire cela (j'ai utilisé this thread pour écrire mon application).La hauteur de ligne de grille d'initialisation ne fonctionne pas

S'il vous plaît aidez-moi à voir ce qui me manque. Je vous remercie!

[Modifier]

La raison pour laquelle je fais ce que je veux définir dynamiquement la hauteur de la ligne de grille supérieure, à savoir. Grid.Row="0", pour être la hauteur de la barre de titre. Quelque part dans mon application, la vue chargée et chevauchent la barre de titre.

Répondre

2

Vous essayez de faire un truc très étrange, qui n'est pas censé fonctionner. Essayez d'apporter les modifications suivantes.

MainWindow.xaml.cs - essayez de toujours garder le code clair derrière vous.

namespace WpfTryIt 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

MainWindow.xaml

<Window x:Class="WpfTryIt.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 

     xmlns:s ="clr-namespace:WpfTryIt" 
     > 
    <Window.DataContext> 
     <s:FakeDataContext></s:FakeDataContext> 
    </Window.DataContext> 


     <Button Content="{Binding Path=BindingHeight}"/> 

</Window> 

Et une nouvelle classe de contexte de données séparées, qui se comportent différentes selon le mode:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using System.Windows; 

namespace WpfTryIt 
{ 
    public class FakeDataContext 
    { 
     public int BindingHeight 
     { 
      get 
      { 
       // Check for design mode. 
       if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
       { 
        //in Design mode 
        return 100; 
       } 
       else 
       { 
        return 200; 
       } 
      } 
     } 
    } 
} 
+0

Dans le cas où le constructeur de la FakeDataContext nécessite des arguments, comment puis-je modifier vos codes pour le faire fonctionner? –

+0

J'ai aussi mis à jour ma question pour expliquer pourquoi j'essaye le 'truc étrange '. –

+0

@Nam Gi VU: En XAML, vous ne pouvez créer que des objets qui ont un constructeur vide. Si vous souhaitez toujours instancier un objet avec des paramètres, consultez cette question http://stackoverflow.com/questions/2335900/using-xamlreader-for-controls-that-does-not-have-a-default-constructor –