.net 有没有一种方法可以在XAML中的绑定中使用变量值和条件?

.net 有没有一种方法可以在XAML中的绑定中使用变量值和条件?,.net,wpf,xaml,data-binding,wpf-controls,.net,Wpf,Xaml,Data Binding,Wpf Controls,我将参考一个具体的例子问这个问题,我使用ScaleX和ScaleY在画布中实现放大和缩小,XAML代码是: <Canvas> <Canvas.LayoutTransform> <ScaleTransform x:Name="scale" ScaleX="1" ScaleY="1" /> </Canvas.LayoutTransform> </Canvas> 这里的zoomFactor是一个私有变量,它

我将参考一个具体的例子问这个问题,我使用ScaleX和ScaleY在画布中实现放大和缩小,XAML代码是:

<Canvas>
    <Canvas.LayoutTransform>
        <ScaleTransform x:Name="scale"  ScaleX="1" ScaleY="1" />
    </Canvas.LayoutTransform>
</Canvas>
这里的zoomFactor是一个私有变量,它允许单击最大的缩小次数

我的问题是:

在XAML中有没有一种方法可以做到这一点,也就是说,有没有一种方法可以定义绑定或触发器,或者以应用基于变量值的条件并更新变量值的方式写入转换器

此外,当zoomFactor的值为-3或3时,是否可以在XAML中禁用“缩小”或“放大”按钮?或者更简单地说,可以根据某个变量的值在XAML中禁用/启用按钮吗


如果是,怎么做?

这里有很多问题:是的,是的,是的

将ScaleX和ScaleY绑定到zoomFactor,然后使用实现您提供的逻辑的IValueConverter:

    <Canvas>
        <Canvas.LayoutTransform>
            <ScaleTransform x:Name="scale"  
ScaleX="{Binding zoomFactor, Converter={StaticResource ZoomConverter}" 
ScaleY="{Binding ScaleX RelativeSource={RelativeSource Mode=Self}}" />
        </Canvas.LayoutTransform>
    </Canvas>

public class ZoomConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double zoomFactor = (Double)value;
            if (zoomFactor > -3)
            {
                return 1 / 2;
            }
            return 1;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

公共类ZoomConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
双zoomFactor=(双)值;
如果(缩放因子>-3)
{
返回1/2;
}
返回1;
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
对于第二个问题,请看一看DataTriggers(它们必须以样式设置)

    <Canvas>
        <Canvas.LayoutTransform>
            <ScaleTransform x:Name="scale"  
ScaleX="{Binding zoomFactor, Converter={StaticResource ZoomConverter}" 
ScaleY="{Binding ScaleX RelativeSource={RelativeSource Mode=Self}}" />
        </Canvas.LayoutTransform>
    </Canvas>

public class ZoomConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double zoomFactor = (Double)value;
            if (zoomFactor > -3)
            {
                return 1 / 2;
            }
            return 1;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }