日期:2014-05-17  浏览次数:21187 次

xaml中怎么动态设定属性?

    比如StackPanel中有一个Rectangle,我希望当Rectangle的Margin随StackPanel宽度的变化而变化,比如,StackPanel的Width是100时Rectangle的Margin为10,0,10,0,当Width为200时为20,0,20,0,以此类推。请问在xaml中怎么实现?不要通过后台用IValueConverter。

------解决方案--------------------
同类型,但是值有发生变化的,也要有转换,只有完全相同的值才可以直接设置绑定,对于默认有转换的可以不需要,比如字符串到日期类型的转换,使用默认格式就完成的,因此不需要自定义IValueConverter,再比如字符串“True”到Bollean类型的true的转换,也是系统直接支持的,因此也不需要自定义了。
------解决方案--------------------
引用:
引用:最方便的就是用IValueConverter,可惜楼主不愿意用。你要做类似的逻辑操作不可能没后台代码的。

这样很麻烦啊,现在是1:10的关系,如果待会要用到一个1:20的又要写一个Converter,那得写多少去啊。

可以带参数的啊。Xaml中类似这样:

Width="{Binding ElementName=Ex1, Path=ActualWidth, Converter={StaticResource ItemsWidthCov},ConverterParameter='10'}

接口实现这样:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double myWidth = (double)value - double.Parse(parameter as string);
            if (myWidth > 0) return myWidth;
            else return 0;
        }