绑定到WPF中的元素:Path表达式可以进行数学运算吗?

Joh*_*ohn 27 .net c# data-binding wpf

我正在尝试使用ElementName和Path 将控件绑定到父级的Height/width属性.但是,我不想绑定到实际高度,而是高度的一半.在能Path表达自己算算?

例如 Path={ActualHeight/2}

我找不到办法做到这一点.还有其他聪明的方法吗?

谢谢!

Rac*_*hel 40

MathConverter在我的XAML绑定中使用a 来进行数学运算.转换器代码可以在这里找到,它的使用方式如下:

Height="{Binding ElementName=RootWindow, Path=ActualHeight,
                 Converter={StaticResource MathConverter},
                 ConverterParameter=@VALUE/2}"
Run Code Online (Sandbox Code Playgroud)

它还将处理更高级的数学方程式

Height="{Binding ElementName=RootWindow, Path=ActualHeight,
                Converter={StaticResource MathConverter},
                ConverterParameter=((@VALUE-200)*.3)}"
Run Code Online (Sandbox Code Playgroud)


Ars*_*yan 23

不,你不应该使用绑定转换器

public class MyConverter : IValueConverter
{
public object Convert(object value, Type  targetType,
      object parameter, CultureInfo culture)
  {
      return (int)value/2;
  }

  public object ConvertBack(object value, Type targetType,
      object parameter, CultureInfo culture)
  {
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 值转换器仅用于此目的 - 转换源和目标之间的值 - http://www.wpftutorial.net/ValueConverters.html.或者如果那太多,你可以声明一个新的只获得属性HalfOfActualHeight,如果这是一个选项. (2认同)

Ale*_*141 7

不,标准绑定不支持Path中的表达式.但是你可以看看我的项目CalcBinding,它是专门为解决这个问题而开发的.说,你可以这样写:

<Button Content="{c:Binding ElementName=grid, Path=ActualWidth+Height}"/>
Run Code Online (Sandbox Code Playgroud)

要么

<Label Content="{c:Binding A+B+C }" />
Run Code Online (Sandbox Code Playgroud)

要么

<Button Visibility="{c:Binding IsChecked, FalseToVisibility=Hidden}" />
Run Code Online (Sandbox Code Playgroud)

其中A,B,C,IsChecked - viewModel的属性,它将正常工作

祝好运!

  • 凉!试过这个,工作没有问题,代码更可读和更短,没有愚蠢的转换器躺在文件中! (2认同)
  • 您需要添加命名空间前缀 xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding"。请参阅示例 https://github.com/Alex141/CalcBinding/blob/master/WpfExample/SecondPage.xaml (2认同)