Silverlight中的圆角矩形

时间:2011-09-27 21:54:14

标签: silverlight rounded-corners

我正在尝试在Silverlight中创建一个矩形,其中的角是圆角的。但是,我没有明确指定矩形的宽度和高度,这意味着它适应包含它的网格的大小(网格的大小取决于屏幕分辨率等,并且在手之前是未知的)。

我希望RadiusX和RadiusY属性分别是矩形宽度和高度的百分比。这样做最干净的方法是什么?是否有一种仅限XAML的方式(不使用代码隐藏)?

2 个答案:

答案 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属性。