我正在尝试在Silverlight中创建一个矩形,其中的角是圆角的。但是,我没有明确指定矩形的宽度和高度,这意味着它适应包含它的网格的大小(网格的大小取决于屏幕分辨率等,并且在手之前是未知的)。
我希望RadiusX和RadiusY属性分别是矩形宽度和高度的百分比。这样做最干净的方法是什么?是否有一种仅限XAML的方式(不使用代码隐藏)?
答案 0 :(得分:2)
下面的两个文件用于测试此http://dl.dropbox.com/u/8679840/SilverlightApplication1.zip
重用的最佳方法是创建类似
的类型转换器
<Grid x:Name="LayoutRoot" Background="White">
<Rectangle x:Name="rectangle"
Width="200" Height="200"
RadiusX="{Binding Width, ElementName=rectangle, Converter={StaticResource myConverter}, ConverterParameter=.1}"
RadiusY="{Binding Height, ElementName=rectangle, Converter={StaticResource myConverter}, ConverterParameter=.1}"
/>
</Grid>
和背后的代码
namespace SilverlightApplication1
{
public class PercentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return System.Convert.ToDouble(value) * System.Convert.ToDouble(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
答案 1 :(得分:0)
虽然Justin King的答案可以在手边知道宽度和高度时起作用,但是如果它们没有设置则不起作用,并且父控件动态地放置矩形。不幸的是,在Silverlight中,您不能在ActualWidth和ActualHeight上使用Binding with Converters,因为它们是计算属性。这意味着当ActualWidth和ActualHeight更改时,内部不会引发属性更改事件,因此绑定不会将更改传播到源。
基本上,此时,唯一的选择是订阅LayoutUpdated事件并在代码隐藏中计算和设置RadiusX和RadiusY属性。