none
有关Metro中如何自绘控件的问题?? RRS feed

  • 问题

  • 步骤一
    <Image x:Name="Image1" HorizontalAlignment="Left" Height="330" Margin="10,0,0,0" VerticalAlignment="Top" Width="578"/>
    <Ellipse x:Name="Ellipse1" Width="300" Height="200" StrokeThickness="2" Fill="LightBlue" Margin="149,370,917,198" />
        
    步骤二
    Scenario1Drawing = ref new Scenario1ImageSource(200, 200, true);
    Image1->Source = Scenario1Drawing;
    
    ImageBrush^ brush = ref new ImageBrush();
    brush->ImageSource = Scenario1Drawing;
    Ellipse1->Fill = brush;
    
    步骤三
    Scenario1Drawing->BeginDraw();
    
    // Clear background
    Scenario1Drawing->Clear(Windows::UI::Colors::Black);
    
    Windows::Foundation::Rect rcTest;
    rcTest.X = 0;
    rcTest.Y = 0;
    rcTest.Width = 100;
    rcTest.Height = 100;
    Scenario1Drawing->FillSolidRect(Windows::UI::Colors::Red, rcTest);
    
    // Stop updating the SurfaceImageSource and draw its contents
    Scenario1Drawing->EndDraw();

    通过上面这些步骤就可以自绘控件内容了,但是请问大家,我如何自绘一个UserControl呢?

    或者仅仅在一个<Grid></Grid>里面我要自己绘制所有的内容,并不加标签可以绘制吗???

    2012年9月26日 3:01

答案

全部回复

  • Scenario1ImageSource 这是什么类型,第三方构建的还是你自定义的。 我不是很明白你要实现的东西,是否你已经有个自定义的WritableBitmap 然后通过它来绘制你要的内容。

    或者你可以换个思路,用Canvas作为载体,然后处理Pointer的一些事件,在其中往这个Canvas中添加你要绘制的内容。参考例子:https://skydrive.live.com/#cid=51B2FDD068799D15&id=51B2FDD068799D15%211063


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月26日 6:12
    版主
  • public ref class Scenario1ImageSource sealed : Windows::UI::Xaml::Media::Imaging::SurfaceImageSource

    这是微软的例子,一个绘制表面。

    还有一个问题,C++里面可以继承IDWriteInlineObject来定制自己的Graphic,用来在文字中插入图片。

    我在XAML中也想继承该类,如下:

    public ref class InlineImage sealed : public IDWriteInlineObject

    但确是错的。。。。有什么需要改变的地方没?

    2012年9月26日 8:12
  • Bob Bao,

    我就是想用D2D绘制我在<Grid></Grid>之间的所有文本。

    那么这个Grid就是载体,除了这个Grid之外,还可以用哪些载体比较适合呢??

    2012年9月26日 8:16
  • D2D的内容必须通过 SurfaceImageSource 或者VirtualSurfaceImageSource来呈现在XAML中,其他方式是不允许的混合这两者的。所以你不能继承IDWriteInlineObject然后实现一个纯XAML的元素在XAML中使用。

    还有一种D3D和XAML混合,就是利用SwapChainBackgroundPanel 。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月26日 8:31
    版主
  • Bob Bao,

    我就是想用D2D绘制我在<Grid></Grid>之间的所有文本。

    那么这个Grid就是载体,除了这个Grid之外,还可以用哪些载体比较适合呢??


    任何Panel都可以,其实你真正的D2D内容是作为一个画刷。所以这个画刷可以作为Rectangle的填充色,Image控件source。而Grid只是呈现包含这个Image 或者Rectangle的布局。不是直接呈现内容的载体。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月26日 8:35
    版主