【问题标题】:Rounded rectangle in SilverlightSilverlight 中的圆角矩形
【发布时间】:2011-09-27 21:54:13
【问题描述】:

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

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

【问题讨论】:

  • 主题是 Silverlight,标签是 Silverlight,但第一句是 WPF。是哪个?
  • @AnthonyWJones 这是银光。感谢您指出这一点。

标签: silverlight rounded-corners


【解决方案1】:

下面两个文件下载我用来测试这个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(); 
        } 
    }
}

【讨论】:

    【解决方案2】:

    虽然 Justin King 的答案在事先知道 Width 和 Height 的情况下有效,但如果没有设置它们就不起作用,并且父控件会动态地布置矩形。不幸的是,在 Silverlight 中,您不能在 ActualWidth 和 ActualHeight 上对转换器使用绑定,因为它们是计算属性。这意味着当 ActualWidth 和 ActualHeight 更改时,不会在内部引发属性更改事件,因此绑定不会将更改传播到源。

    基本上,此时,唯一的选择是订阅 LayoutUpdated 事件并在代码隐藏中计算和设置 RadiusX 和 RadiusY 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多