這是一個全XAML解決方案。那麼,主要是XAML,因爲你必須在代碼中使用IValueConverter。所以:創建一個新的WPF項目並向它添加一個類。該類是MultiplyConverter:
namespace YourProject
{
public class MultiplyConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return AsDouble(value)* AsDouble(parameter);
}
double AsDouble(object value)
{
var valueText = value as string;
if (valueText != null)
return double.Parse(valueText);
else
return (double)value;
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new System.NotSupportedException();
}
}
}
然後使用此XAML爲您的窗口。現在,您應該可以在XAML預覽窗口中看到結果。
編輯:您可以通過將Canvas放入另一個Canvas中來解決Background問題。有點奇怪,但它的作品。另外,我添加了一個ScaleTransform,它可以翻轉Y軸,這樣正Y就會上升,負值會下降。仔細注意哪些名字去的地方:
<Canvas Name="canvas" Background="Moccasin">
<Canvas Name="innerCanvas">
<Canvas.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="translate">
<TranslateTransform.X>
<Binding ElementName="canvas" Path="ActualWidth"
Converter="{StaticResource multiplyConverter}" ConverterParameter="0.5" />
</TranslateTransform.X>
<TranslateTransform.Y>
<Binding ElementName="canvas" Path="ActualHeight"
Converter="{StaticResource multiplyConverter}" ConverterParameter="0.5" />
</TranslateTransform.Y>
</TranslateTransform>
<ScaleTransform ScaleX="1" ScaleY="-1" CenterX="{Binding ElementName=translate,Path=X}"
CenterY="{Binding ElementName=translate,Path=Y}" />
</TransformGroup>
</Canvas.RenderTransform>
<Rectangle Canvas.Top="-50" Canvas.Left="-50" Height="100" Width="200" Fill="Blue" />
<Rectangle Canvas.Top="0" Canvas.Left="0" Height="200" Width="100" Fill="Green" />
<Rectangle Canvas.Top="-25" Canvas.Left="-25" Height="50" Width="50" Fill="HotPink" />
</Canvas>
</Canvas>
至於你需要改變你的範圍內的新要求,更復雜的ValueConverter可能會做的伎倆。
我有一個功能,我只是希望不需要始終將畫布點和畫布之間進行轉換。 – Dylan 2008-10-31 16:48:39
這樣做確實具有使畫布更加美觀和可伸縮的優點。 – MojoFilter 2008-10-31 17:13:57