wpfcanvas源码_wpf 源码

hacker|
146

文章目录:

c#wpf中canvas.left怎么调用出来

你想设置Canvas的位置的话,用Margin。Canvas.Left是针对Canvas内部元素的。

wpf里canvas,stackpanel怎么移动,想实现一个panel向另一个panel平滑过渡的效果

把要移动的panel放到canvas里,然后用动画处理他的canvas.top和canvas.left值就可以了

C# WPF中的canvas应该如何分成一个6*6格的格子。

你可以先用Gird 分6行6列再将canvas放到Gird里,canvas调用Gird的附加属性,你看这样行不行。

C#的WPF程序,如何使Canvas有旋转效果

不知道提问者指的旋转效果是咋样的,所以就做了两种不同的。有啥问题尽管问哈^ ^

Window.Resources

Storyboard x:Key="ScaleTransformStoryboard"

DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:02" RepeatBehavior="Forever" Storyboard.TargetName="canvas1"

Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"

SplineDoubleKeyFrame Value="1"/

SplineDoubleKeyFrame Value="-1"/

SplineDoubleKeyFrame Value="1"/

/DoubleAnimationUsingKeyFrames

/Storyboard

Storyboard x:Key="RotateTransformStoryboard"

DoubleAnimation Storyboard.TargetName="canvas2" From="0" To="359" BeginTime="00:00:00" Duration="00:00:05" RepeatBehavior="Forever"

Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)"

/DoubleAnimation

/Storyboard

/Window.Resources

Window.Triggers

EventTrigger RoutedEvent="FrameworkElement.Loaded"

BeginStoryboard Storyboard="{StaticResource ScaleTransformStoryboard}"/

BeginStoryboard Storyboard="{StaticResource RotateTransformStoryboard}"/

/EventTrigger

/Window.Triggers

Grid

Grid.ColumnDefinitions

ColumnDefinition/

ColumnDefinition/

/Grid.ColumnDefinitions

Canvas x:Name="canvas1" Width="100" Height="100" Background="Aquamarine" Grid.Column="0"

Canvas.RenderTransform

TransformGroup

ScaleTransform ScaleX="1" ScaleY="1"/

/TransformGroup

/Canvas.RenderTransform

/Canvas

Canvas x:Name="canvas2" Width="100" Height="100" Background="Aquamarine" Grid.Column="1"

Canvas.RenderTransform

TransformGroup

RotateTransform Angle="0" CenterX="0" CenterY="0"/

/TransformGroup

/Canvas.RenderTransform

/Canvas

/Grid

WPF中Canvas的复制

使用 XamlReader 和 XamlWrite 是可以复用一个 UIElement.

但在保存时最好指定 xmlns. 另外, 如果将要复用的 UIElement (例如 Canvas) 定义为一种 Resource, 则只能添加一次,否则,出现:

Specified Visual is already a child of another Visual or the root of a CompositionTarget.

这种错误.

但我给个方便的例子,不用 xaml Reader/Writer 来完成对 UIElement 或 FrameworkElement 的复制/重用:

楼主是用 Canvas, 然后在 Canvas 里放一些矢量图(其实放什么不重要),然后显示 200 个这样的 Canvas, 那好,将这个 原始的 Canvas 定义为一种资源:

Window ......... // 这里省略号表示省略了一些内容(例如 xmlns)

Window.Resources

ControlTemplate x:Key="myCanvas"

Canvas

Image Source="abc.png"/

!-- 这里不知道楼主是怎么写的,但不重要,因为它是 Canvas 的子元素 --

/Canvas

/ControlTemplate

/Window.Resources

Grid x:Name="LayoutRoot"

!-- 我们要在这个 Grid 放置 200 个 定义在资源中的 Canvas --

/Grid

/Window

下面是后台的逻辑 code:

怎么触发自己设置

void Display200Canvas()

{

for(int i=0; i200; i++)

{

Control ctrl=new Control();

ctrl.Template = Window.Resources["myCanvas"] As ControlTemplate;

// 这里设置一下 ctrl 的位置, 不要重叠就可以了,怎么设置就略去了

// .....

LayoutRoot.Children.Add(ctrl);

}

}

完成~

主要是利用 Control 控件加载 ControlTemplate, 而 这个 ControlTemplate 就是你所要显示的东西,它作为 xaml 中的 资源 定义在 ControlTemplate 元素中.

实际上这并不限是 Canvas.

3条大神的评论

  • avatar
    访客 2022-07-08 上午 09:01:02

    s.RenderTransform /Canvas /GridWPF中Canvas的复制使用 XamlReader 和 XamlWrite 是可以复用一个 UIElement.但在保存

  • avatar
    访客 2022-07-08 上午 06:01:26

    --/Canvas/ControlTemplate/Window.ResourcesGrid x:Name="LayoutRoot"!-- 我们要在这个 Grid 放置 200 个 定义在资源中的 Canvas --/Grid/Window下面是后台的

  • avatar
    访客 2022-07-08 上午 08:37:28

    /TransformGroup /Canvas.RenderTransform /Canvas /GridWPF中Canvas的复制使用 XamlReader 和 XamlWrite 是可以复用一个 UIElement.

发表评论