c#wpf使用绘制的矩形刷新画布
这对你来说可能是个愚蠢的问题,但我已经寻找了几个小时来得到答案 我的主窗口中有一块画布,上面有一些矩形。通过一个文本框和一个按钮,我想修改矩形(和画布)的宽度 这是我的wpf代码:c#wpf使用绘制的矩形刷新画布,c#,wpf,canvas,refresh,rectangles,C#,Wpf,Canvas,Refresh,Rectangles,这对你来说可能是个愚蠢的问题,但我已经寻找了几个小时来得到答案 我的主窗口中有一块画布,上面有一些矩形。通过一个文本框和一个按钮,我想修改矩形(和画布)的宽度 这是我的wpf代码: <Canvas Name="IV" Width="{Binding Path=Länge}" Height="280" VerticalAlignment="Top" Margin="443,22,443.5,0"> <Rectangle Canvas.Left="0" Canvas
<Canvas Name="IV" Width="{Binding Path=Länge}" Height="280" VerticalAlignment="Top" Margin="443,22,443.5,0">
<Rectangle Canvas.Left="0" Canvas.Top="157.5" Width="{Binding Path=Länge}" Height="136" Name="rect3704" Fill="#FF999999" StrokeThickness="0.26458332"/>
<Rectangle Canvas.Left="0" Canvas.Top="20.5" Width="{Binding Path=Länge}" Height="136" Name="rect37047" Fill="#FF999999" StrokeThickness="0.26458332"/>
<Rectangle Canvas.Left="0" Canvas.Top="294.5" Width="{Binding Path=Länge}" Height="2.5" Name="rect3721" Fill="#FF999999" StrokeThickness="0.26458332"/>
<Rectangle Canvas.Left="0" Canvas.Top="17" Width="{Binding Path=Länge}" Height="2.5" Name="rect37217" Fill="#FF999999" StrokeThickness="0.26458332"/>
<Rectangle Canvas.Left="0" Canvas.Top="293.5" Width="{Binding Path=Länge}" Height="1" Name="rect3738" Fill="#FF333333" StrokeThickness="0.26458332"/>
<Rectangle Canvas.Left="0" Canvas.Top="156.5" Width="{Binding Path=Länge}" Height="1" Name="rect37386" Fill="#FF333333" StrokeThickness="0.26458332"/>
<Rectangle Canvas.Left="0" Canvas.Top="19.5" Width="{Binding Path=Länge}" Height="1" Name="rect373867" Fill="#FF333333" StrokeThickness="0.26458332"/>
</Canvas>
如果修改声明变量“Länge”的起始值,则矩形将采用指定的宽度。但是“通过更新”按钮除了messagebox之外什么都不做。如您所见,我尝试了一些解决方案,如Dispatcher.Invoke或canvas.InvalidateVisual()等,但都不起作用。。
对不起,刚到C#,只在实践中学习 使用a,它应该可以工作:
public int Länge
{
get { return (int)GetValue(LängeProperty); }
set { SetValue(LängeProperty, value); }
}
public static readonly DependencyProperty LängeProperty =
DependencyProperty.Register(
"Länge ", typeof(int), typeof(MainWindow), new PropertyMetadata(50));
没有必要使措施或其他内容无效:
public void button_Click(object sender, RoutedEventArgs e)
{
int Length = Convert.ToInt32(textBox.Text);
Länge = Length;
MessageBox.Show(Convert.ToString(Länge));
}
另外,请注意,您应该将Binding ElementName设置为当前控件还是设置正确的DataContext。大概是这样的:
Width="{Binding ElementName=window, Path=Länge}"
其中“window”是MainWindow.Xaml中的主窗口名称
Width="{Binding ElementName=window, Path=Länge}"