2011-09-27 150 views
0

我正在試圖在Silverlight中圓角處創建一個矩形。但是,我沒有明確指定矩形的寬度和高度,這意味着它適應包含它的網格的大小(網格的大小取決於屏幕分辨率等等,並且在手之前不知道)。Silverlight中的圓角矩形

我希望RadiusX和RadiusY屬性分別是矩形寬度和高度的百分比。最乾淨的做法是什麼?是否只有XAML方式(不採用代碼隱藏方式)?

+0

該主題說Silverlight,標籤說Silverlight,但第一句話說WPF。這是什麼? – AnthonyWJones

+0

@AnthonyW瓊斯是銀光。感謝您指出了這一點。 –

回答

0

雖然賈斯汀國王的回答工作,如果在寬度和高度的手之前已知的代碼,如果他們不設置它不工作,和家長控制動態奠定了矩形的。不幸的是,在Silverlight中,你不能在ActualWidth和ActualHeight上使用Binding with Converters,因爲它們是計算屬性。這意味着當ActualWidth和ActualHeight發生更改時,屬性更改事件不會在內部引發,因此綁定不會將更改傳播到源。

實質上,在這一點上,唯一的選擇是訂閱LayoutUpdated事件並計算並設置代碼隱藏中的RadiusX和RadiusY屬性。

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(); 
     } 
    } 
}