2013-02-25 110 views
0

我有下面的代碼工作。它正確地保持20像素寬的最小繪圖寬度。但是,我需要設置MinHeight值。我想讓我的MinHeight值保持當前的高度/寬度比。我怎麼做?任何訣竅WPF MinWidth或MinHeight保持高度/寬度比?

<Grid MinWidth="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type c:IWorldAndScreen}}, Path=MetersPerPixel, Converter={StaticResource multiplier}, ConverterParameter=20}"> 
    <Grid.Width> 
     <MultiBinding Converter="{StaticResource summation}"> 
      <Binding Path="Front" /> 
      <Binding Path="Back" /> 
     </MultiBinding> 
    </Grid.Width> 
    <Grid.Height> 
     <MultiBinding Converter="{StaticResource summation}"> 
      <Binding Path="Left" /> 
      <Binding Path="Right" /> 
     </MultiBinding> 
    </Grid.Height> 
... 
</Grid> 

回答

0

這就是我想出了:

<Grid.MinHeight> 
    <!-- height/width * actualWidth --> 
    <MultiBinding Converter="{StaticResource divMulAdd}"> 
     <Binding RelativeSource="{RelativeSource Self}" Path="Height"/> 
     <Binding RelativeSource="{RelativeSource Self}" Path="Width"/> 
     <Binding RelativeSource="{RelativeSource Self}" Path="ActualWidth"/> 
    </MultiBinding> 
</Grid.MinHeight> 

與該轉換器相結合:

public class DivMulAddMultiConverter : IMultiValueConverter 
    { 
     #region Implementation of IMultiValueConverter 

     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (targetType != typeof(double)) throw new ArgumentException("Expected a target type of Double", "targetType"); 
      if (values == null || values.Length <= 0) return 0.0; 

      var cur = System.Convert.ToDouble(values[0]); 
      if(values.Length > 1) 
       cur /= System.Convert.ToDouble(values[1]); 
      if(values.Length > 2) 
       cur *= System.Convert.ToDouble(values[2]); 
      for(int i = 3; i < values.Length; i++) 
       cur += System.Convert.ToDouble(values[i]); 

      return cur; 
     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
相關問題