* MSDN 1002 *:
Вы можете установить это значение в XAML, но только как часть синтаксиса атрибута для свойств, которые принимают CornerRadius , или как текст инициализации элемента объекта CornerRadius . См. Разделы XAML и разделы примечаний CornerRadius .
Вы можете попытаться связать все свойство CornerRadius
и использовать конвертер, чтобы получить все ресурсы и создать из них экземпляр CornerRadius
, используя конструктор.
например. используя только одно значение:
<Border Name="bd" BorderBrush="Red" BorderThickness="1">
<Border.Resources>
<sys:Double x:Key="CR_TopLeft">5</sys:Double>
</Border.Resources>
<Border.CornerRadius>
<Binding ElementName="bd">
<Binding.Converter>
<vc:CornerRadiusConverter />
</Binding.Converter>
</Binding>
</Border.CornerRadius>
<Button>!</Button>
</Border>
public class CornerRadiusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var resourceSource = (FrameworkElement)value;
var topLeft = (double)resourceSource.Resources["CR_TopLeft"];
return new CornerRadius(topLeft, 0, 0, 0);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
Вероятно, вы можете сделать это более общим, если будете искать ресурсы, идущие вверх по дереву и не нацеливаясь непосредственно на объект, для которого определены ресурсы.
(Это проблема только для Silverlight, в WPF ваш код работает нормально, если у вас есть вопрос по Silverlight, избегайте тега WPF, если проблема не существует в WPF)