C# 如何在WPF中重写行的StrokeThickness属性
这是过去几天我一直面临的问题。我在C# 如何在WPF中重写行的StrokeThickness属性,c#,wpf,binding,line,C#,Wpf,Binding,Line,这是过去几天我一直面临的问题。我在画布上有10000多个行对象和一个滑块,用于缩放画布以创建缩放效果。 一切都很好,表演也很棒 唯一困扰我的是,行的StrokeThickness也被缩放了。我尝试将StrokeThickness绑定到滑块值的倒数,以便在移动滑块时获得均匀的厚度。这起到了作用,但大大降低了性能 有没有其他适合这种情况的方法。无论我将画布缩放多远,我都希望线条宽度为零(就像在CAD程序中一样)。为了达到您想要达到的效果,覆盖StrokeThickness实际上并不意味着什么,因为它
画布上有10000多个行
对象
和一个滑块
,用于缩放画布以创建缩放效果。
一切都很好,表演也很棒
唯一困扰我的是,行
的StrokeThickness
也被缩放了。我尝试将StrokeThickness
绑定到滑块值的倒数,以便在移动滑块时获得均匀的厚度。这起到了作用,但大大降低了性能
有没有其他适合这种情况的方法。无论我将画布缩放多远,我都希望线条宽度为零(就像在CAD程序中一样)。为了达到您想要达到的效果,覆盖
StrokeThickness
实际上并不意味着什么,因为它的值实际上保持不变,即使ScaleTransform
发生了更改
您尝试的方法-Bind
将StrokeThickness
绑定到滑块值的倒数-似乎是最合理的方法。若要提高性能,请将其设置为视图模型上的另一个属性,而不是将StrokeThickness
直接设置为滑块值的倒数
然后,在滑动完成的情况下,将该属性的值设置为StrokeThickness
的倒数
示例-
private void OnSlidingComplete(object sender, EventArgs e)
{
LineStrokeThickness = GetInverseOfZoomValue();
}
我知道这不完全是一个解决方案,而是一个解决办法。您不能将
滑块
移到画布
之外吗?@Anchit我的滑块
已经在画布
之外了。我使用滑块缩放画布
。但是画布上行
对象的笔划宽度
也会改变!在这种情况下,我认为没有直接的方法可以做到这一点。您正在使用ScaleTransform
对吗?@Anchit是的,我正在使用'ScaleTransform'。我想知道CAD程序是如何做到这一点的。这对滑块的ValueChanged
事件不起作用。只有在我释放滑块上的鼠标后,它才会工作。这就是我所说的“滑动完成”事件。请看这里-我想实时查看更改。让我们考虑这种可能性,而不是滑块,我使用鼠标轮。这些变化将是实时的,只是所有的<代码>线< /代码>控件将得到正规化,一旦滑块的拖放完成。要处理所有情况(如鼠标滚轮、单击滑块、键盘),请参见。我明白你的意思。问题是,当我释放鼠标时,在更新之前存在延迟。我想这是WPF中的一个主要警告,线条的笔划厚度也会被缩放,这使得它不适合CAD程序。