在Canvas上根据变量改变Shape的位置2009-12-31 javaeye RednaxelaFX昨晚有朋友问:引用Hi,帮我讲解一下WPF怎样在Canvas或者Grid上根据变量改变 Shape的位置和形状吧~没太理解问题在哪里,不过看样子是数据绑定方面不熟悉?那 就写个用到Canvas和数据绑定的例子吧。在VS2008里新建一个WPF应用,然后把下面的Window1.xaml和 Window1.xaml.cs替换进去就行。做出来的是像这样的一个界面(是很丑啦 T T)

把Window里 的根容器Grid分成上下两行:上半部分放置用于控制和显示坐标的控件;下半部分放置一个Canvas,里 面放一个Rectangle。在TextBox里输入数字或者滑动ScrollBar都能够改变Rectangle的位置。也 就是随便在VS2008的WPF Designer里拖拖控件把界面拉出来:Window1.xamlXml代码
<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="TestWpfCanvasShapeDataBinding.Window1"xmlns:Custom="http://schemas.microsoft.com/winfx/2006/xaml/composite-font"Title="Test Data Binding" Height="480" Width="230" ><Grid><Grid.RowDefinitions><RowDefinition /><RowDefinition /></Grid.RowDefinitions><TextBox Name="txtX" Margin="12,10,0,0" Height="23" Width="95" VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding Path=RectX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /><Label Name="lblX" Margin="12,40,0,0" Height="23" Width="95" VerticalAlignment="Top" HorizontalAlignment="Left" Content="{Binding Path=RectX}" /><Button Name="btnX" Margin="0,10,5,0" Height="23" Width="81"VerticalAlignment="Top" HorizontalAlignment="Right"Click="button1_Click" >Check X Value</Button><ScrollBar Name="scbX" Margin="12,70,5,0" Height="20" Width="181" VerticalAlignment="Top" Orientation="Horizontal" Maximum="200" Value="{Binding Path=RectX, Mode=TwoWay}" /><TextBox Name="txtY" Margin="12,120,0,0" Height="23" Width="95" VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding Path=RectY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /><Label Name="lblY" Margin="12,150,0,0" Height="23" Width="95" VerticalAlignment="Top" HorizontalAlignment="Left" Content="{Binding Path=RectY}" /><Button Name="btnY" Margin="0,120,5,0" Height="23" Width="81"VerticalAlignment="Top" HorizontalAlignment="Right"Click="button2_Click" >Check Y Value</Button><ScrollBar Name="scbY" Margin="12,180,5,0" Height="20" Width="181" VerticalAlignment="Top" Orientation="Horizontal" Value="{Binding Path=RectY, Mode=TwoWay}" Maximum="200" /><Canvas Margin="0,0,0,0" Grid.Row="1" ><Canvas.Background><Custom:LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5" ><Custom:GradientStop Color="#FF337496" Offset="0" /><Custom:GradientStop Color="#FF94E2EC" Offset="1" /></Custom:LinearGradientBrush></Canvas.Background><Rectangle Height="20" Width="20" Stroke="#FF301A87" Fill="#FF8169E6" Canvas.Left="{Binding Path=RectX}" Canvas.Top="{Binding Path=RectY}" /></Canvas></Grid></Window>