c#wpf刷新带有绘制矩形的画布

时间:2017-02-12 01:33:47

标签: c# wpf canvas refresh rectangles

这对你来说可能是一个愚蠢的问题,但我一直在寻找数小时才能得到答案。

我的主窗口中有一个带有一些矩形的画布。使用TextBox和Button,我想修改矩形(和画布)的宽度。

这是我的wpf代码:

<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'的起始值,则矩形采用指定的宽度。但是更新via按钮除了消息框之外什么都不做。正如你所看到的,我尝试了一些像Dispatcher.Invoke或canvas.InvalidateVisual()等的解决方案,但这些都不起作用.. 对不起,C#的新手,只能边做边学。

1 个答案:

答案 0 :(得分:0)

使用DependencyPropety,它应该有效:

Width="{Binding ElementName=window, Path=Länge}"

无需使用措施或其他内容无效:

{{1}}

另外,请注意,您应该将Binding ElementName设置为当前控件还是设置正确的DataContext。像这样:

{{1}}

其中“window”是MainWindow.Xaml中MainWindow的名称。