我可以有以下幾種(ActualWidth
除以2)嗎?數學運算符可以應用於綁定路徑嗎?
<StackPanel Name="SP2" Width="{Binding ElementName=SP1, Path=ActualWidth/2}">
似乎不適合我。
謝謝。
我可以有以下幾種(ActualWidth
除以2)嗎?數學運算符可以應用於綁定路徑嗎?
<StackPanel Name="SP2" Width="{Binding ElementName=SP1, Path=ActualWidth/2}">
似乎不適合我。
謝謝。
您可以使用自定義轉換器直接在XAML中執行簡單的計算。
看看,例如,在此實現:
簡單的用法:
<RotateTransform Angle="{Binding Text, ElementName=Seconds,
Converter={ikriv:MathConverter}, ConverterParameter=x*6}" />
最經典的方法是創建一個只讀屬性來計算。 因此,在這種簡單情況下,您可以添加第二個屬性HalfWidth
。
public double HalfWidth
{
get
{
return ActualWidth/2.0;
}
}
壞消息是,當ActualWidth
更新,在視圖上StackPanel
勢必HalfWidth
將不會更新。 這是因爲視圖不知道HalfWidth
已更改。
通過在設置者ActualWidth
上提高屬性更改事件HalfWidth
,該視圖將查詢HalfWidth
並因此檢索正確的值。
private double _actualWidth;
public double ActualWidth
{
get
{
return _actualWidth;
}
set
{
if (_actualWidth != value)
{
_actualWidth = value;
OnPropertyChanged("ActualWidth");
OnPropertyChanged("HalfWidth");
}
}
}
這種方法的主要proplem是,它很快會成爲一場噩夢,當我們有沒有制定者衆多的計算性能。
這就是爲什麼(在MVVM模式中)我個人更喜歡使用自定義轉換器。
謝謝。如何決定是完成所有這些工作還是隻在Windows的SizeChanged事件處理程序中有一行代碼背後? –
@老吉澤爾我已經更新了我的答案 –
不,您只能在綁定中使用屬性(以及某些情況下的索引到數組/集合中)。
取而代之,您需要綁定到返回預期值(例如ActualWidth/2)的notify屬性,或者使用在應用計算時返回值的轉換器。
你想做什麼?將「寬度」設置爲「SP1.ActualWidth」值的一半?如果是這樣,一個'轉換器'可能是你所追求的。 –
請不要在綁定中使用'ActualWidth',因爲它不是一個依賴項屬性,並不一定符合您的期望。見問題http://stackoverflow.com/questions/7403151(WPF)和http://stackoverflow.com/questions/1602148(Silverlight)。 –
@PhilipKendall,是的,那正是我想要做的。每次窗口大小調整時,我都希望SP2能達到SP1的一半寬度。 –