在 xaml 中将 int 文本框输入转换为负数?

Convert int textbox input to negative in xaml?

我有一个文本框,用户可以在其中输入一个数字,该数字将用作旋转图像的角度。有没有办法将 xaml 中的数字转换为负数?因此,如果用户输入 50,我希望图像旋转 -50 度而不是 +50。我宁愿不在代码隐藏中这样做。它的代码如下:

<TextBox x:Name="testing" />

 <Image Source="aaaa.png" x:Name="thisimage" >
    <Image.LayoutTransform>
        <RotateTransform CenterX="0.5" CenterY="0.5"  Angle="{Binding Path=Text , ElementName=testing, UpdateSourceTrigger=PropertyChanged}" />
    </Image.LayoutTransform>
 </Image>

试试下面的代码。

首先创建实现 IValueConverter:

public class AngleConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var angle = (int)value;

        if (angle != null)
        {
            return -angle;
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

XAML:

<TextBox x:Name="testing" />
<Image Source="aaaa.png" x:Name="thisimage" >
<Image.LayoutTransform>
    <RotateTransform CenterX="0.5" CenterY="0.5"  Angle="{Binding Path=Text , ElementName=testing, Converter={StaticResource angleConverter} UpdateSourceTrigger=PropertyChanged}" />
</Image.LayoutTransform>

添加对您的转换器的引用:

xmlns:cr="using:[project].Converters"

不要忘记添加到资源:

<UserControl.Resources>
    <cr:AngleConverter x:Key="angleConverter"/>
</UserControl.Resources>

这将是一个纯粹的 XAML 解决方案:

<Image.LayoutTransform>
    <TransformGroup>
        <ScaleTransform ScaleX="-1"/>
        <RotateTransform CenterX="0.5" CenterY="0.5"
            Angle="{Binding Path=Text, ElementName=testing,
                            UpdateSourceTrigger=PropertyChanged}" />
        <ScaleTransform ScaleX="-1"/>
    </TransformGroup>
</Image.LayoutTransform>

我仍然建议使用绑定转换器。