Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中重写行的StrokeThickness属性_C#_Wpf_Binding_Line - Fatal编程技术网

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程序。