我是初学者,我的wpf项目有问题。 如何通过拖动滑块来更改点的位置? 我试图使用它,但它不起作用
<Grid Name="myGrid">
<Line Name="Sa"/>
<Line Name="Sb"/>
<Line Name="Oa"/>
<Line Name="Ob"/>
<Slider Name="Slid1" Margin="78,51,1002,332" IsDirectionReversed="False" IsMoveToPointEnabled="False" Maximum="100" Minimum="-100" IsEnabled="True" />
</Grid>
这些代码背后:
InitializeComponent();
Sa = new Line();
Sa.Stroke = System.Windows.Media.Brushes.Black;
Sa.X1 = Slid1.Value;
Sa.X2 = window.Width / 2;
Sa.Y1 = (window.Height) / 2;
Sa.Y2 = window.Height / 2 -50;
答案 0 :(得分:0)
问题是您将Sa.X1指定为Slid1.Value作为编译时常量值。 您必须为slider.ValueChanged事件实现一个侦听器来刷新值。
应该看起来像:
Slider.ValueChanged + = new Eventlistener(RefreshPosition)
和
RefreshPosition(object sender,ValueChangedEventargs args) { Sa.X1 = sender.value; }
//如果这不能编译,你需要将发送者转换为滑块..(例如'发送者作为滑块')
整个建议只是伪代码。您还可能希望使用属性封装Sa.X1 ..
编辑:更正了事件名称(感谢XAMIMAX)
答案 1 :(得分:0)
如果您想使用后面的代码,请使用下面的代码
Sa.X1 = Slid1.Value;
Sa.X2 = window.Width / 2;
Sa.Y1 = (window.Height) / 2;
Sa.Y2 = window.Height / 2 -50;
在Slider.ValueChanged
的事件处理程序中: - )
答案 2 :(得分:0)
试试这个:
public MainWindow()
{
InitializeComponent();
Sa.Stroke = System.Windows.Media.Brushes.Black;
Slid1.ValueChanged += Slid1_ValueChanged;
}
void Slid1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Sa.X1 = slider.Value;
Sa.X2 = window.Width / 2;
Sa.Y1 = (window.Height) / 2;
Sa.Y2 = window.Height / 2 - 50;
}
如果你这样做
Sa = new Line();
您正在创建一个新的Line实例。这仅在java中需要自己做。在C#中,所有这些都是由应用程序本身完成的。