2015-11-08 1 views
1

Je crée une application de Windows 8.1 en utilisant https://slideview.codeplex.com dans Windows 10 avec l'aide de Visual Studio 2015.Reliure ColumDefinition Largeur

J'ai ajouté la grille à la conception avec 1 ligne et deux colonnes. Dans la première page il y a une grande image et pas de texte et dans les autres pages il y a une icône et un texte. Donc je mets si 4 * dans la première colonne pour la première page et 2 * dans la première pour la deuxième page tout fonctionne bien mais je voulais le rendre dynamique dans ContentPresenter et ensuite je peux l'assigner de C#.

Veuillez nous aider.

J'ai essayé de manière différente comme je mets ci-dessous le code dans SlideApplicationFrame.cs

#region FirstColumnWidth (DependencyProperty) 

    /// <summary> 
    /// header Image First Column Width 
    /// </summary> 
    public GridLength FirstColumnWidth 
    { 
     get { return (GridLength)GetValue(FirstColumnWidthProperty); } 
     set { SetValue(FirstColumnWidthProperty, value); } 
    } 
    public static readonly DependencyProperty FirstColumnWidthProperty = 
      DependencyProperty.Register("FirstColumnWidth", typeof(GridLength), typeof(SlideApplicationFrame), 
       new PropertyMetadata(new GridLength(4, GridUnitType.Star))); 

    #endregion 

    #region ContentFirstColumnWidth (Attached DependencyProperty) 

    public static readonly DependencyProperty ContentFirstColumnWidth = 
      DependencyProperty.RegisterAttached("ContentFirstColumnWidth", typeof(GridLength), typeof(SlideApplicationFrame), new PropertyMetadata(new GridLength(4, GridUnitType.Star))); 

    public static void SetContentFirstColumnWidth(DependencyObject o, GridLength value) 
    { 
     o.SetValue(ContentFirstColumnWidth, value); 
    } 

    public static GridLength GetContentFirstColumnWidth(DependencyObject o) 
    { 
     return (GridLength)o.GetValue(ContentFirstColumnWidth); 
    } 

    #endregion 

Puis-je utiliser dans mon ContentPresenter Vous aimez cette

<ContentPresenter library:SlideApplicationFrame.ContentFirstColumnWidth="{TemplateBinding FirstColumnWidth}" Grid.Column="1"/> 

et à la fin dans le style poseur

<ColumnDefinition Width="{Binding library:SlideApplicationFrame.ContentFirstColumnWidth}"/> 

Setter de style entier est comme ci-dessous

<Setter Property="HeaderTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid x:Name="GridHeader"> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="{Binding library:SlideApplicationFrame.ContentFirstColumnWidth}"/> 
          <ColumnDefinition Width="5*"/> 
         </Grid.ColumnDefinitions> 
        </Grid> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 

et de la mise en MainPage.xaml.cs

SlideApplicationFrame RootFrame = Window.Current.Content as SlideApplicationFrame; 

RootFrame.FirstColumnWidth = new GridLength(4, GridUnitType.Star); 

S'il vous plaît aidez-moi, je serai très apprécié

+0

Où que vous essayez de faire: ** Reliure Largeur ColumDefinition **? – kirotab

+0

Je veux faire dans cette ligne . Juste besoin d'aide pour que je puisse faire le myselft – Milind

+0

Vous voulez dire que vous devez le lier à une certaine valeur du ViewModel (ou du code derrière) ou à la valeur d'un élément? – kirotab

Répondre

1

Eh bien d'abord, vous devez avoir à l'esprit que les valeurs de ColumnDefinition Width et RowDefinition Height ne sont pas de type Double mais de type GridLength

Et après cela, il y a deux scénarios auxquels je peux penser:

  1. Reliure à la valeur d'un autre élément

  2. liaison à la valeur de la ViewModel ou le code derrière

Cas 1:

Si vous lier à certains valeur qui est double vous devrez également utiliser un convertisseur pour convertir cette valeur à GridLength

Cas n ° 2:

Si vous lier à quelque chose dans le code que vous pouvez créer la propriété de type GridLength et lier directement, ou si la valeur est double utiliser à nouveau Converter comme dans le cas précédent d'utilisation.

Quelques références sur le type

GridLength Structure

GridUnitType Enumeration

  • Auto - La taille est déterminée par les propriétés de taille de l'objet de contenu. Pixel - La valeur est exprimée en pixels.
  • Star - La valeur est exprimée en proportion pondérée de l'espace disponible.

Edition - Juste un exemple simple de travailler la liaison

n'a toujours pas réussi à trouver le temps de recréer votre situation exacte donc je viens d'utiliser GridView (comme il l'a aussi en-tête) - Le contenu est violet , en-tête est constitué de deux colonnes de la grille - vert et rouge, le vert est lié à la dépendance propriété définie dans la page principale

XAML

<Page 
    ... 
    x:Name="root"> 
    <Page.Resources> 
     <Style TargetType="GridView" > 
      <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <Grid x:Name="GridHeader" Height="200"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="5*"/> 
           <ColumnDefinition Width="{Binding ElementName=root, Path=TestGridLength}"/> 
          </Grid.ColumnDefinitions> 
          <Grid Background="Red" Grid.Column="0"></Grid> 
          <Grid Background="Green" Grid.Column="1"></Grid> 
         </Grid> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Page.Resources> 

    <GridView Background="Purple"> 
    </GridView> 
</Page> 

code derrière

public GridLength TestGridLength 
{ 
    get { return (GridLength)GetValue(TestGridLengthProperty); } 
    set { SetValue(TestGridLengthProperty, value); } 
} 

public static readonly DependencyProperty TestGridLengthProperty = 
    DependencyProperty.Register(
     "TestGridLength", 
     typeof(GridLength), 
     typeof(MainPage), 
     new PropertyMetadata(null)); 


public MainPage() 
{ 
    this.InitializeComponent(); 
    this.TestGridLength = new GridLength(10, GridUnitType.Star); 
} 
+0

Selon votre suggestion, j'ai fait quelques changements, mais cela n'a pas fonctionné. Veuillez m'aider. J'ai déjà mis à jour ma question de nouveaux codes – Milind