文章目录:
- 1、c#wpf中canvas.left怎么调用出来
- 2、wpf里canvas,stackpanel怎么移动,想实现一个panel向另一个panel平滑过渡的效果
- 3、C# WPF中的canvas应该如何分成一个6*6格的格子。
- 4、C#的WPF程序,如何使Canvas有旋转效果
- 5、WPF中Canvas的复制
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.
s.RenderTransform /Canvas /GridWPF中Canvas的复制使用 XamlReader 和 XamlWrite 是可以复用一个 UIElement.但在保存
--/Canvas/ControlTemplate/Window.ResourcesGrid x:Name="LayoutRoot"!-- 我们要在这个 Grid 放置 200 个 定义在资源中的 Canvas --/Grid/Window下面是后台的
/TransformGroup /Canvas.RenderTransform /Canvas /GridWPF中Canvas的复制使用 XamlReader 和 XamlWrite 是可以复用一个 UIElement.