2017-02-12 18 views
0

これはあなたにとってばかげた質問かもしれませんが、私はそれに答えて何時間も探しています。c#wpf描画された長方形のキャンバスをリフレッシュ

私はいくつかの四角形で私のメインウィンドウにキャンバスを持っています。テキストボックスとボタンで、私は長方形の幅変更したい

私の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#の新機能は、初めてのことです。

答えて

0

DependencyPropety使用し、それが動作するはずです:また、

public void button_Click(object sender, RoutedEventArgs e) 
{ 
    int Length = Convert.ToInt32(textBox.Text); 
    Länge = Length; 
    MessageBox.Show(Convert.ToString(Länge)); 
} 

あなたにバインディングのElementNameを設定すべきかどうかということに注意してください:

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)); 

メジャーまたは他のものを無効にする必要はありません適切なDataContextを設定します。このような何か:「ウィンドウ」で

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

はMainWindow.Xamlで、メインウィンドウの名前です。

+0

[この回答を参照](http://stackoverflow.com/a/13956932/5615980) – Ron

関連する問題