如何在可拖动的画布上制作矩形?

时间:2016-05-11 13:03:28

标签: c# wpf wpf-controls

我有这三个函数来触发事件。我已经有了我的需求的静态版本,但我需要它的动态版本。

    bool captured = false;
    double x_shape, x_canvas, y_shape, y_canvas;
    UIElement source = null;

    private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        source = (UIElement)sender;
        Mouse.Capture(source);
        captured = true;
        x_shape = Canvas.GetLeft(source);
        x_canvas = e.GetPosition(canvasPreview).X;
        y_shape = Canvas.GetTop(source);
        y_canvas = e.GetPosition(canvasPreview).Y;
    }

    private void MouseMove(object sender, MouseEventArgs e)
    {
        //MessageBox.Show("test");
        if (captured)
        {
            double x = e.GetPosition(canvasPreview).X;
            double y = e.GetPosition(canvasPreview).Y;
            x_shape += x - x_canvas;
            Canvas.SetLeft(source, x_shape);
            x_canvas = x;
            y_shape += y - y_canvas;
            Canvas.SetTop(source, y_shape);
            y_canvas = y;
        }
    }

    private void MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        Mouse.Capture(null);
        captured = false;
    }

我在WPF中制作了一个名为“canvasPreview”的画布,我想在画布中添加矩形(目前在静态版本中使用椭圆),它必须可以使用上述函数进行拖动。它已经在运行,但它必须是动态的。

我希望你能帮助我,提前谢谢你!

1 个答案:

答案 0 :(得分:3)

我确定此示例代码可以为您提供帮助。

XAML:

def score(dice)
    score = 0
    # grab all the numbers and their amounts
    number_amounts = dice.reduce(Hash.new(0)) { |hash, numb| hash[numb] += 1; hash }

    # iterate through each pair
    number_amounts.each do |key, value|
      # case with number 1
      score += (value % 3) * 100 + value / 3 * 1000 if (key == 1)
      # case with number 5
      score += (value % 3) * 50 + value / 3 * key * 100 if (key == 5)
      # all numbers except 1 and 5
      score += (value / 3) * key * 100 if (key != 1 && key != 5)
    end
    score
end

C#:

<Grid Margin="12">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <StackPanel Grid.Row="0" Orientation="Horizontal">
        <Button x:Name="addRectangleButton" Content="Add Rectngle" Click="addRectangleButton_Click"/>
    </StackPanel>

    <Canvas Grid.Row="1" x:Name="canvas" Margin="0,12,0,0">
        <Rectangle x:Name="rectangle" Width="100" Height="50" Fill="RoyalBlue" MouseDown="rectangle_MouseDown" MouseMove="rectangle_MouseMove" MouseUp="rectangle_MouseUp" Canvas.Left="0" Canvas.Top="0"/>
    </Canvas>
</Grid>