Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF/Silverlight:我可以轻松地修改绑定到的属性吗?_Wpf_Silverlight_Xaml - Fatal编程技术网

WPF/Silverlight:我可以轻松地修改绑定到的属性吗?

WPF/Silverlight:我可以轻松地修改绑定到的属性吗?,wpf,silverlight,xaml,Wpf,Silverlight,Xaml,例如: Width={Binding MyWidth} 我想做: Width={Binding MyWidth/2} 这不管用。。。我想知道是否有一个简单的方法来做到这一点。(无需编写转换器,也无需更改或创建新属性) 注:宽度不一定。。我说的是一般的财产 谢谢绝对不是在Silverlight中,正如您所写,您唯一的选择就是转换器或新属性 编辑:刚刚选中,使用本文作为参考,即使使用WPF也似乎不可能:绝对不是在Silverlight中,正如您所写,您唯一的选项是转换器或新属性 编辑:刚刚选

例如:

 Width={Binding MyWidth}
我想做:

 Width={Binding MyWidth/2}
这不管用。。。我想知道是否有一个简单的方法来做到这一点。(无需编写转换器,也无需更改或创建新属性)

注:宽度不一定。。我说的是一般的财产


谢谢

绝对不是在Silverlight中,正如您所写,您唯一的选择就是转换器或新属性


编辑:刚刚选中,使用本文作为参考,即使使用WPF也似乎不可能:

绝对不是在Silverlight中,正如您所写,您唯一的选项是转换器或新属性

编辑:刚刚选中,即使使用WPF,也似乎不可能,使用本文作为参考:

不,您不能

您必须编写一个值转换器。您唯一能做的就是使用formatstring来更改格式

但是你可以编写一个多用途的转换器,你可以给它一个参数——它甚至可以是你发明的某种脚本,这样你就可以在各种情况下使用它,比如你的部门。

不,你不能

您必须编写一个值转换器。您唯一能做的就是使用formatstring来更改格式


但是你可以编写一个多用途的转换器,你可以给它一个参数,它甚至可以是你发明的某种脚本,这样你就可以在各种情况下使用它,比如你的部门。正如Rune所说,我需要编写一个转换器。如果你愿意,可以用我的

用法示例:

Width="{Binding Width, Converter={StaticResource DoubleOffsetConverter}, ConverterParameter=50%}"
这是转换器。您的问题似乎只需要单向转换,尽管我认为在必要时实现ConvertBack以实现双向转换并不太困难

public class DoubleOffsetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            double valueDouble = System.Convert.ToDouble(value);

            if (parameter != null)
            {
                string paramString = parameter.ToString();
                double paramDouble;
                if (paramString.EndsWith("%"))
                {
                    //
                    // Multiply by the percentage.
                    //
                    if (double.TryParse(paramString.Substring(0, paramString.Length - 1), out paramDouble))
                    {
                        return valueDouble * paramDouble / 100.0;
                    }
                }
                else if (double.TryParse(parameter.ToString(), out paramDouble))
                {
                    //
                    // Add the offset.
                    //
                    return valueDouble + paramDouble;
                }

            }
        }

        return value;
    }

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

事实上,我不久前就不得不这么做了。正如Rune所说,我需要编写一个转换器。如果你愿意,可以用我的

用法示例:

Width="{Binding Width, Converter={StaticResource DoubleOffsetConverter}, ConverterParameter=50%}"
这是转换器。您的问题似乎只需要单向转换,尽管我认为在必要时实现ConvertBack以实现双向转换并不太困难

public class DoubleOffsetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            double valueDouble = System.Convert.ToDouble(value);

            if (parameter != null)
            {
                string paramString = parameter.ToString();
                double paramDouble;
                if (paramString.EndsWith("%"))
                {
                    //
                    // Multiply by the percentage.
                    //
                    if (double.TryParse(paramString.Substring(0, paramString.Length - 1), out paramDouble))
                    {
                        return valueDouble * paramDouble / 100.0;
                    }
                }
                else if (double.TryParse(parameter.ToString(), out paramDouble))
                {
                    //
                    // Add the offset.
                    //
                    return valueDouble + paramDouble;
                }

            }
        }

        return value;
    }

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

根据其他因素,scaletransform可能是一种选择——我多么希望这是可能的!!:取决于其他因素,scaletransform可能是一个选项哦,我多么希望这是可能的!!:D