簡體   English   中英

c#wpf用繪制的矩形刷新畫布

[英]c# wpf refresh a canvas with drawn 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.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#的新手,只能邊做邊學。

使用DependencyPropety ,它應該可以工作:

    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的名稱,位於MainWindow.Xaml中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM