это может быть глупым вопросом для вас, но я искал часы, чтобы получить ответ на этот вопрос.C# wpf обновить холст с нарисованными прямоугольниками
У меня есть холст в моем главном окне с некоторыми прямоугольниками. С TextBox и Button, я хочу изменить ширину прямоугольниками
Это мой МОФ код (и 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>
Мой C# код, который
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
public int Länge { get; set; } = 50;
public void button_Click(object sender, RoutedEventArgs e)
{
int Length = Convert.ToInt32(textBox.Text);
Länge = Length;
IV.InvalidateVisual();
IV.InvalidateMeasure();
IV.UpdateLayout();
Action emptyDelegate = delegate { };
IV.Dispatcher.Invoke(emptyDelegate, DispatcherPriority.Render);
MessageBox.Show(Convert.ToString(Länge));
}
}
Если я изменяю начальное значение, когда объявляю переменную «Länge», прямоугольники занимают указанную ширину. Но обновление с помощью кнопки ничего не делает, кроме сообщения. Как вы можете видеть, я пробовал некоторые решения, такие как Dispatcher.Invoke или canvas.InvalidateVisual() и т. Д., Но ничего из этого не работает. Извините, новичок в C#, только учитесь.
см. [Этот ответ] (http://stackoverflow.com/a/13956932/5615980) – Ron