2009-12-02 3 views
3

예를 들어 크기가 다른 요소의 크기의 두 배가 되길 원하는 요소가있는 경우 어떻게해야합니까?어떤 종류의 수식이 포함 된 바인딩을 어떻게 만듭니 까?

예는 다음과 같습니다. mirroredObjectBorder 객체의 너비의 절반을 사용하려는 객체입니다.

<Border Width="{Binding ActualWidth, ElementName=mirroredObject, Mode=Default}" /> 

나는 어떻게이 달성 것, 재산은 내가 다른 요소의 폭의 합이 될 수도에 결합하는 것 같아서 다른 상황이?

솔루션

lenanovd의 대답에 의해 원조 된 솔루션에 대한 내 대답을 참조하십시오.

답변

6

수식을 사용하여 int를 다른 int로 변환하는 바인딩 변환기를 사용할 수 있습니다. 바인딩 변환기의 예를 들어 this 문서를 읽으십시오.

희망이 있습니다.

+0

환상적인, 그 levanovd 주셔서 감사합니다, 난 그냥 변환기를 만든 다른 사람들이 다른 인터페이스 요소에 바인딩하려는 경우 내 질문에 대한 해결책을 추가합니다. –

2

이 문제를 해결하는 방법에 대한 힌트를 제공 한 Levanovd에게 감사드립니다. 다음은이 문제에 대한 해결책입니다. 다시 감사의 말을 전하십시오.

<Window.Resources> 
    <n:MultiplierConverter x:Key="MultiplierConverter"/> 
</Window.Resources> 

는 승수 인수를 지정 객체 사이의 바인딩 추가하여 XAML로 변환

[ValueConversion(typeof(double), typeof(double))] 
public class MultiplierConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
     if (targetType != typeof(Double)) 
      throw new Exception("Conversion not allowed."); 
     double f, m = (double)value; 
     string par = parameter as string; 
     if (par == null || !Double.TryParse(par, out f)) f = 1; 
     return m * f; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     if (targetType != typeof(Double)) 
      throw new Exception("Conversion not allowed."); 
     double f, m = (double)value; 
     string par = parameter as string; 
     if (par == null || !Double.TryParse(par, out f)) f = 1; 
     return f == 0 ? float.NaN : m/f; 
    } 
} 

컨버터를 추가를 만듭니다.

<StackPanel> 
    <Rectangle x:Name="source" Width="100" Height="100" Stroke="Black"/> 
    <Rectangle Width="100" Stroke="Black" 
      Height="{Binding ActualWidth, ElementName=source, Mode=Default, 
           Converter={StaticResource MultiplierConverter}, 
           ConverterParameter=2}"/> 
</StackPanel> 

이제 둘째 사각형 제 사각형의 두 배 높이되며 ConverterParameter 조정할 수있다. 불행히도 ConverterParameter을 다른 속성에 바인딩 할 수는 없지만 그 제한이 존재하는 이유는 확실하지 않습니다.

관련 문제