none
如何在WPF中动态创建控件,并向空间添加子级属性(RenderTransform,TransformGroup). RRS feed

  • 问题

  •        

            诉求:因情况特殊,需要在后台动态创建 Image 控件,此 Image 控件 要求实现拖拽,惯性,并遇到边界时有反弹效果.

            注:这里是我在xaml中写的控件与属性,但是现在我需要在后台生成控件的时候,把下面的属性添加到Image控件中, 需要生成的控件效果在xaml 中 的描述:

           
    <Canvas x:Name="canvas" Background="Gray" MouseMove="canvas_MouseMove" Height="500" Width="1000">
            <Image x:Name="rect" Source="psb.jpg"
                   MouseLeftButtonDown="rect_MouseLeftButtonDown" 
                   MouseLeftButtonUp="rect_MouseLeftButtonUp">
                <Image.RenderTransform>
                    <TransformGroup x:Name="RectangleTransform">
                        <TranslateTransform/>
                    </TransformGroup>
                </Image.RenderTransform>
            </Image>  
        </Canvas>

            生成控件的C# 代码如下:

           

    ImageSource ISource = new BitmapImage(new Uri(img.ToolTip.ToString(), UriKind.Relative)); Image im = new Image(); im.IsManipulationEnabled = true; MatrixTransform tf = new MatrixTransform(); im.RenderTransform = tf;

    ......


            然后再附加到我的容器中.

            其他的功能我都已经实现了,只需要把属性在后台添加上去就ok。以上的代码是把RenderTransform 给加入到 Image 下面了.

            现在不清楚的是,如何在添加了 RenderTransform 之后,再到它的下面添加 TransformGroup 呢? 并且赋 Name 属性,

            在TransformGropp 下面还有 标签  <TranslateTransform/>

            就是要求能达到xaml 文件中的效果一样。

           

            初学 WPF 不久,盼获得帮助,不胜感激~

    2014年8月16日 8:45

答案

  • 你好,

    在后台代码中已经有 MatrixTransform,所以就不需要再添加 TransformGroup 了。本质上 MatrixTransform 与 TransformGroup 实现的是同一个内容。另外,代码中需要把Tranform设置到Image控件上,而不是图片之上。请参考:

            private void AddImage()
            {
                Image myImage = new Image();
                BitmapImage imageSource = new BitmapImage(new Uri("sample_photo_01.jpg"));
                myImage.Source = (ImageSource)imageSource;
    
                MatrixTransform transform = new MatrixTransform();
                myImage.RenderTransform = transform;
    
                this.RootLayout.Children.Add(myImage);
            }

    关于 MatrixTransform,建议参考: http://wpf.2000things.com/tag/matrixtransform/

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年8月18日 2:20
    版主