以编程方式在画布上设置图像位置

时间:2015-05-29 18:50:06

标签: c# wpf

我有以下代码:

namespace Game
{
    public partial class MainWindow : Window
    {
        Image img = new Image();

        public MainWindow()
        {
            InitializeComponent();
            myCanvas.Focus();

            img.Source = new BitmapImage(new Uri("C:\\Users\\Public\\Pictures\\Sample Pictures\\Koala.jpg"));
            img.Width = 100;
            img.Height = 100;              
        }

        public void OnKeyDownHandler(object sender, KeyEventArgs e)
        {
            Canvas.SetTop(img, 0);
            Canvas.SetLeft(img, 0);
            this.Content = img;

        }
    }
}

和XAML:

 <Canvas Name="myCanvas" KeyDown="OnKeyDownHandler" Focusable="True" HorizontalAlignment="Left" Height="166" Margin="118,89,0,0" VerticalAlignment="Top" Width="300"/>

当我按下按钮时,图像会像我想要的那样显示,但是在窗口的中央。我想要做的是将图像设置在我想要的X,Y位置。我该怎么做?

3 个答案:

答案 0 :(得分:0)

<Canvas>
    <Image x:Name="Foo" Canvas.Top="200" Canvas.Left="200" />
</Canvas>

Foo.SetValue(Canvas.Left, 100);
Foo.SetValue(Canvas.Top, 225);

这是我的基本测试场景。将图像精确地设置为Image.SetValue(Canvas.Position, int)所说的位置。

答案 1 :(得分:0)

像这样。

double left = (Canvas.ActualWidth - img.ActualWidth) / 2;
Canvas.SetLeft(img, left);

double top  = (img.ActualHeight - img.ActualHeight) / 2;
Canvas.SetTop(img, top);

答案 2 :(得分:0)

在OnKeyDownHandler方法的最后一行中,“this”表示MainWindow,因此您的代码将使用Image替换其内容,包括Canvas在内的整个可视树。如果您希望将图像添加到画布,它应该类似于

this.myCanvas.Children.Add(img);