2010-03-25 9 views
0

En XAML je veux lier la hauteur d'un élément à la moitié de la hauteur d'un autre élément. Y at-il un moyen de faire cela qui n'implique pas d'écrire un convertisseur dans le code-behind?Existe-t-il un moyen de faire des calculs simples dans une instruction de liaison d'élément xaml autre que l'utilisation d'un convertisseur?

Exemple: - Ce que j'ai ...

<Button Name="RemoveButton" Content="Remove Stage" Width="100" Height="{Binding ElementName=AddButton, Path=Height, Converter={StaticResource MyHalfHeightConverter}}"/> 

Ce que je voudrais ...

<Button Name="RemoveButton" Content="Remove Stage" Width="100" Height="{Binding ElementName=AddButton, Path=(Height/2.0)}"/> 

Répondre

4

Je ne pense pas qu'il y ait une solution de liaison sans convertisseur . Mais pourquoi ne pas en utiliser un? Vous rencontrerez souvent une exigence comme celle-ci, il est donc logique de créer une sorte de MathConverter qui prend certaines propriétés ou paramètres. Ensuite, vous n'avez pas besoin de créer un convertisseur séparé pour chaque exigence.

Cependant, si vous ne voulez vraiment pas utiliser un convertisseur, en fonction de votre mise en page que vous pouvez également utiliser une grille d'étoile taille où le AddButton est réparti sur deux lignes alors que la RemoveButton occupe une seule ligne:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <Button Name="AddButton" Grid.Row="0" Grid.RowSpan="2" ... /> 
    <Button Name="RemoveButton" Grid.Row="1" ... /> 

</Grid> 

Si vous voulez que le RemoveButton soit centré verticalement, utilisez ceci:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="2*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 

    <Button Name="AddButton" Grid.Row="0" Grid.RowSpan="3" ... /> 
    <Button Name="RemoveButton" Grid.Row="1" ... /> 

</Grid> 

de cette façon, l'AddButton occupe trois lignes (4 * au total) tandis que le RemoveButton est dans la rangée centrale (2 *).

S'il n'est pas possible de les ajouter à une grille partagée, vous pouvez utiliser la propriété jointe Grid.IsSharedSizeScope. Les détails peuvent être trouvés here.