Doğrudan XAML'de basit hesaplamalar yapmak için özel bir dönüştürücü kullanabilirsiniz.
Bu uygulama, mesela, bir göz atın:
MathConverter
Basit kullanımı:
<RotateTransform Angle="{Binding Text, ElementName=Seconds,
Converter={ikriv:MathConverter}, ConverterParameter=x*6}" />
klasik yaklaşım salt okunur hesaplanan özellik yaratmaktır. Yani bu basit durumda HalfWidth
ikinci bir özellik ekleyebilirsiniz.
public double HalfWidth
{
get
{
return ActualWidth/2.0;
}
}
kötü haber ActualWidth
güncellendiğinde, HalfWidth
bağlı görünümde StackPanel
güncelleme olmayacak olmasıdır. Bunun nedeni, görünümün HalfWidth
'un değiştiğini bilmemesidir.
ActualWidth
ait setter HalfWidth
bir özellik değiştirilen olayı yükselterek, görünümü HalfWidth
sorgulamak ve dolayısıyla doğru değeri alacaktır.
private double _actualWidth;
public double ActualWidth
{
get
{
return _actualWidth;
}
set
{
if (_actualWidth != value)
{
_actualWidth = value;
OnPropertyChanged("ActualWidth");
OnPropertyChanged("HalfWidth");
}
}
}
bu yaklaşım hakkında ana proplem hiçbir belirleyiciler ile sayısız hesaplanan özelliklere sahip olduğunda yakında bir kabus haline gelecek olmasıdır. Bu nedenle (bir MVVM modelinde) kişisel bir dönüştürücü kullanmayı tercih ediyorum.
Ne yapmaya çalışıyorsunuz? "Genişlik", "SP1.ActualWidth" değerinin yarısına ayarlandı mı? Eğer öyleyse, 'Dönüştürücü' muhtemelen peşinde olduğunuzdur. –
Bağımlılık özelliği olmadığından ve beklediğinizi yapmayacağınız için lütfen ActualWidth özelliğini bağlamalarda kullanmayın. Http://stackoverflow.com/questions/7403151 (WPF) ve http://stackoverflow.com/questions/1602148 (Silverlight) sorularına bakın. –
@PhilipKendall, evet yapmaya çalıştığım şey buydu. Pencerenin her yeniden boyutlandırıldığında SP2'nin SP1'in yarısı kadar olmasını istiyorum. –