WPF - 将图像绘制到画布并重复擦除和重绘

时间:2010-07-21 13:07:14

标签: c# wpf canvas drawing slider

我目前在WPF应用程序中有一个带有图像背景的画布。在这个画布上方,我有一个滑块控件。我需要,当用户来回滑动滑块的值时,在画布上垂直向下绘制一条红线。每次更改滑块值时,我都需要这样做,以便红线始终与滑块的拇指对齐。我在这里遇到的一个大问题是试图找出如何有效地绘制线条,然后“擦除”先前绘制的线条,并在用户更改滑块值时以新的拇指值绘制新线条。如果我只是重新绘制画布的背景图像,那么应用程序会滞后很多而且效果不好(另外,这只是直接输出并不能完全解决问题,因为你仍然可以看到以前绘制的线条。)

任何帮助都绝对值得赞赏,特别是有例子,因为我这是我在C#中的第一个WPF应用程序,我仍然感觉它的独特性(与Windows Forms相反)。非常感谢!

1 个答案:

答案 0 :(得分:4)

不是试图自己绘制线,而是采用更多WPF方式来使用Line对象。见Shapes and Basic Drawing in WPF Overview。由于您希望线与Slider对齐,您可以使用数据绑定将线的X位置绑定到Slider的位置:

<DockPanel>
    <Slider
        Name="HorizontalSlider"
        DockPanel.Dock="Top"
        Maximum="{Binding ActualWidth, ElementName=Canvas}"/>
    <Canvas Name="Canvas" Margin="5.5 0">
        <Line
            X1="{Binding Value, ElementName=HorizontalSlider}"
            Y1="0"
            X2="{Binding Value, ElementName=HorizontalSlider}"
            Y2="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType=Canvas}}"
            Stroke="Red"/>
    </Canvas>
</DockPanel>

(注意我通过将画布上的边距设置为5.5来作弊。滑块上的拇指有一些厚度并且不会移动滑块控件的整个宽度,所以为了让线条到线我试图让画布与轨道的宽度相同。)

相关问题