У меня есть сложная «точка» в WPF, которая мне нужна для настройки диаметра.
Пример контрольного кода:
<UserControl>
<Canvas>
<Canvas.RenderTransform>
<TranslateTransform X="-6" Y="-6"/>
</Canvas.RenderTransform>
<Ellipse Width="12" Height="12" x:Name="BigCircle" Fill="Red"/>
<Ellipse Width="8" Height="8" x:Name="MediumCircle" Fill="Green" Canvas.Left="2" Canvas.Top="2"/>
<Ellipse Width="4" Height="4" x:Name="SmallCircle" Fill="Blue" Canvas.Left="4" Canvas.Top="4" />
</Canvas>
</UserControl>
Чего я хочу достичь:
<UserControl>
<UserControl.Resources>
<sys:Double x:Key="dd">120</sys:Double>
</UserControl.Resources>
<Canvas>
<Canvas.RenderTransform>
<TranslateTransform X="-dd/2" Y="-dd/2"/>
</Canvas.RenderTransform>
<Ellipse Width="{DynamicResource ResourceKey=dd}" Height="{DynamicResource ResourceKey=dd}" x:Name="BigCircle" Fill="Red"/>
<Ellipse Width="dd*2/3" Height="dd*2/3" x:Name="MediumCircle" Fill="Green" Canvas.Left="dd/6" Canvas.Top="dd/6"/>
<Ellipse Width="dd/3" Height="dd/3" x:Name="SmallCircle" Fill="Blue" Canvas.Left="dd/3" Canvas.Top="dd/3" />
</Canvas>
</UserControl>
каждый раз, когда я меняю «дд», я хочу, чтобы мои круги пропорционально менялись.
Использование конвертеров
[ValueConversion(typeof(double), typeof(double))]
public class LargeToMediumConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((double)value * 2) / 3;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
/* XAML */
<UserControl.Resources>
<sys:Double x:Key="DotDiameter">12</sys:Double>
</UserControl.Resources>
...
<Ellipse Width="{Binding ElementName=DotDiameter}" Height="{Binding ElementName=DotDiameter}" x:Name="LargeCircle" ...
...
так что это не работает ....