【问题标题】:Convert int textbox input to negative in xaml?在xaml中将int文本框输入转换为负数?
【发布时间】:2015-04-17 07:33:20
【问题描述】:

我有一个文本框,用户可以在其中输入一个数字,该数字将用作旋转图像的角度。有没有办法将 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>

【问题讨论】:

  • 是否可以接受 ValueConverter 或者您是否正在寻找仅 XAML 的解决方案? ValueConverter 是代码,但不是“代码背后”
  • 好吧,我想要一个仅限 XAML 的解决方案,因为我试图摆脱在 C# 中使用两倍的代码量做这么多的习惯。但如果不可能或太麻烦,那么我可以做一个 valueconverter。
  • 但 XAML 用于布局,代码用于逻辑。
  • 有一个很好的线程here 描述了ValuConverters,还有第二个解决方案,就是NegatedText { get { return -Text; } },我认为这是最简单的解决方案。想来想去,不写任何代码我觉得没有任何解决办法。

标签: c# wpf xaml textbox converter


【解决方案1】:

这将是一个纯 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>

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

【讨论】:

  • 这就是我要找的。不过,其他答案/cmets 有所帮助,我现在正在研究转换器。
【解决方案2】:

试试下面的代码。

首先创建实现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>

【讨论】:

  • 根据documentation,方法好像实现不正确。不应该是(object, Type, object, string),而是(object, Type, object, CultureInfo)
  • @Default 取决于平台。在这里,它是 Windows 运行时的正确实现,尽管问题是针对 WPF。 XAML 命名空间声明 xmlns:cr="using:..." 也是 Windows 运行时。
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多