2016-06-01 5 views
0

Я настраиваю свой пользовательский контроль.выражение silverlight в привязке

У меня есть некоторые «константы» относительно размера объекта, и в моем объекте шаблона У меня есть что-то вроде

<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"> 
      ... 

Если бы я хотел ширину «witdh_plus_margin» быть «ширина» значение I просто добавил что-то вроде

Width="{StaticResource width}" 

но то, что мне действительно нужно установить что-то вроде

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

этот синтаксис неверен. Есть ли способ указать, что мне нужно?

ответ

1

Вы не можете привязываться к нескольким свойствам источника в привязке. Поэтому вам нужен какой-то агрегатор, который предлагает свойство вывода, с которым вы можете связать.

Вот некоторые вариации одного и того же шаблона:

<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}"> 

с BindableResult, имеющий неявный оператор в литую удвоится:

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

или что-то вроде этого:

<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> 

You может также google для реализация multiplinding silverlight и посмотрите, насколько это по вашему вкусу. Но в итоге это всего лишь еще одна вариация агрегатора.

 Смежные вопросы

  • Нет связанных вопросов^_^