2016-06-01 3 views
0

Je suis un style de contrôle de la mine.silverlight expression dans la reliure

j'ai quelques « constantes » en ce qui concerne la taille de l'objet, et dans mon objet modèle je quelque chose comme

<UserControl ...> 
    <UserControl.Resources> 
     <sys:Double x:Key="width">10</sys:Double> 
     <sys:Double x:Key="margin">30</sys:Double> 
    </UserControl.Resources> 
    ... 
    <ControlTemplate ...> 
     <Grid x:Name="width_plus_margin"> 
      ... 

Si je voulais la largeur de la « witdh_plus_margin » pour être une valeur « largeur » I venez d'ajouter quelque chose comme

Width="{StaticResource width}" 

mais ce que je vraiment besoin est de mettre quelque chose comme

Width="{StaticResource width} + {StaticResource margin}" 

cette syntaxe est erronée. Existe-t-il un moyen de spécifier ce dont j'ai besoin?

Répondre

1

Vous ne pouvez pas lier à plusieurs propriétés source dans une liaison. Par conséquent, vous avez besoin d'une sorte d'agrégateur qui offre une propriété de sortie contre laquelle vous pouvez vous lier.

Voici quelques variantes du même modèle:

<UserControl.Resources> 
    <sys:Double x:Key="width">10</sys:Double> 
    <sys:Double x:Key="margin">30</sys:Double> 
    <BindableResult x:Key="widthPlusMargin" ArithmeticOperation="Add" LeftOperand="{StaticResource width}" RightOperand="{StaticResource margin}"/> 
</UserControl.Resources> 

<Grid Width="{StaticResource widthPlusMargin}"> 

avec BindableResult ayant un opérateur coulé implicite double:

public static implicit operator double(BindableResult source) 
{ 
    return source.InternalResult; 
} 

ou quelque chose comme ceci:

<UserControl.Resources> 
    <sys:Double x:Key="width">10</sys:Double> 
    <sys:Double x:Key="margin">30</sys:Double> 
</UserControl.Resources> 

<Grid> 
    <i:Interaction.Behaviors> 
     <SetCombinedWidth Value1="{StaticResource width}" Value2="{StaticResource margin}"/> 
    </i:Interaction.Behaviors> 
</Grid> 

Vous peut également google pour silverlight implémentations multibinding et voir si cela est plus à votre goût. Mais à la fin c'est juste une autre variation de l'agrégateur.