我目前在WPF应用程序中有一个带有图像背景的画布。在这个画布上方,我有一个滑块控件。我需要,当用户来回滑动滑块的值时,在画布上垂直向下绘制一条红线。每次更改滑块值时,我都需要这样做,以便红线始终与滑块的拇指对齐。我在这里遇到的一个大问题是试图找出如何有效地绘制线条,然后“擦除”先前绘制的线条,并在用户更改滑块值时以新的拇指值绘制新线条。如果我只是重新绘制画布的背景图像,那么应用程序会滞后很多而且效果不好(另外,这只是直接输出并不能完全解决问题,因为你仍然可以看到以前绘制的线条。)
任何帮助都绝对值得赞赏,特别是有例子,因为我这是我在C#中的第一个WPF应用程序,我仍然感觉它的独特性(与Windows Forms相反)。非常感谢!
答案 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来作弊。滑块上的拇指有一些厚度并且不会移动滑块控件的整个宽度,所以为了让线条到线我试图让画布与轨道的宽度相同。)