【发布时间】:2009-06-27 18:06:33
【问题描述】:
我想将 scaleTransform 绑定到传递 ActualWidth 或 ActualHeight 的转换器。
这是我想做的:
<Canvas x:Name="Canevas">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform
ScaleX="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UIElement}},
Path=ActualWidth, Mode=OneWay,
Converter={StaticResource ScaleConverter},
ConverterParameter={Binding Path=ActualWidth}"
ScaleY="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UIElement}},
Path=ActualHeight, Mode=OneWay,
Converter={StaticResource ScaleConverter},
ConverterParameter={Binding Path=ActualHeight}}"
/>
</TransformGroup>
</Canvas.RenderTransform>
<Ellipse Canvas.Left="47" Canvas.Top="48" Height="155"
Name="ellipse1" Stroke="Black" Width="174" Fill="#FF00C6C3" />
问题是这不能编译:
ConverterParameter={Binding Path=ActualHeight}
所以我想知道如何将这些属性作为我的转换器的参数移动?是否可以在完整的 Xaml 中解决?
非常感谢您的帮助!
转换器源代码:
public class ScaleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
double v = (double)value;
var actualSize = (double)parameter; //ActualWidth, ActualHeight
var vScale = v * (1 + (v / actualSize));
return vScale;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
【问题讨论】:
-
你能显示你的转换器的代码吗?为什么需要 ConverterParameter ?也许你应该使用 MultiBinding 和 IMultiValueConverter...
-
我添加了转换器源代码
-
我不确定我是否理解你想要做什么......转换器应该返回一个比例因子,但根据你的公式它将返回一个宽度(或高度)。你到底想达到什么目的?
标签: wpf xaml binding actualwidth actualheight