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