我有一个画布,我在上面画线(通过线或路径),指示用户要遵循的道路。有没有办法改变这条线,让它显示一个重复的图像?我正在寻找的是有一个步骤图标(透明的png)而不是一条直线。
谢谢!
我有一个画布,我在上面画线(通过线或路径),指示用户要遵循的道路。有没有办法改变这条线,让它显示一个重复的图像?我正在寻找的是有一个步骤图标(透明的png)而不是一条直线。
谢谢!
这将绘制一个重复的图像作为 Stroke for a Path
。Viewport
努力实现您正在寻找的价值观
<Path StrokeThickness="10" Data="M 10,10 100,10" Stretch="Fill">
<Path.Stroke>
<ImageBrush ImageSource="C:\arrow.gif" Viewport="0,0,0.1,1" TileMode="Tile"/>
</Path.Stroke>
</Path>
更新
要旋转 ImageBrush,您可以向其添加 RotateTransform
<ImageBrush ImageSource="C:\arrow.gif" Viewport="0,0,1,0.1" TileMode="Tile">
<ImageBrush.Transform>
<RotateTransform Angle="90"/>
</ImageBrush.Transform>
</ImageBrush>
如果您想要一个遵循路径的图像,您可以使用与此问题的答案类似的方法。我对其进行了一些修改以使用图像
<Window.Resources>
<PathGeometry x:Key="Path" x:Shared="False" Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100"/>
<Image x:Key="followPathImage" x:Shared="False" x:Name="Arrow1" Source="C:\arrow.gif" Width="16" Height="16">
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform X="-8" Y="-8"/>
<MatrixTransform>
<MatrixTransform.Matrix>
<Matrix/>
</MatrixTransform.Matrix>
</MatrixTransform>
</TransformGroup>
</Image.RenderTransform>
<Image.Triggers>
<EventTrigger RoutedEvent="Image.Loaded">
<BeginStoryboard>
<Storyboard>
<MatrixAnimationUsingPath Storyboard.Target="{Binding RelativeSource={RelativeSource AncestorType={x:Type Image}}}"
Storyboard.TargetProperty="RenderTransform.Children[1].Matrix"
DoesRotateWithTangent="True"
Duration="0:0:5"
BeginTime="0:0:0"
RepeatBehavior="Forever"
PathGeometry="{StaticResource Path}" >
</MatrixAnimationUsingPath>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
</Window.Resources>
<Canvas Width="400" Height="400" Name="canvas">
<Path Data="{StaticResource Path}" Opacity="0" Stroke="Blue" StrokeThickness="1"/>
<Button Canvas.Left="184" Canvas.Top="253" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" />
</Canvas>
以及一些添加动画箭头的代码
public MainWindow()
{
InitializeComponent();
var addAnimationThread = new Thread(new ThreadStart(() =>
{
for (int i = 0; i < 25; i++)
{
Dispatcher.Invoke(new Action(() =>
{
Image image = this.FindResource("followPathImage") as Image;
canvas.Children.Add(image);
}));
Thread.Sleep(199);
}
}));
addAnimationThread.Start();
}
我不太确定我是否完全理解你想要什么,但在这里我从你的帖子中了解到我的两分钱:
您可以使用 Line 和/或 Path 对象绘制线条。通过使用路径,您可以绘制曲线而不是直线。为了简化设计过程,使用 MS Expression Blend 并使用屏幕左侧工具箱中的“铅笔”工具绘制线条。确保使用路径的“StrokeThickness”属性来更改每条曲线的粗细。
您可以创建按钮并使用 png 图像文件绘制它们。您需要将按钮的“背景”属性初始化为具有 ImageSource 的 ImageBrush 对象。例如,步骤图标可以是按钮的 UI。您可以对许多其他元素执行此操作,而不仅仅是按钮。
您还可以直接将图像文件作为“图像”对象导入并处理它们的事件,如 MouseEnter、MouseLeave、MouseLeftButtonDown 等。在这种情况下,您可以将图像视为用户可以单击、进入、离开等的交互元素。
此外,尝试使用 Expression Blend 中的一些预定义形状。单击屏幕左侧工具箱旁边的“资产”选项卡,然后导航到“形状”。