2017-02-12 8 views
0

이것은 바보 같은 질문 일 수 있습니다. 그러나 그 답변을 얻으려면 몇 시간 씩 조사하고 있습니다.C# wpf 그려진 사각형이있는 캔바스를 새로 고침

일부 사각형이있는 메인 윈도우에 Canvas가 있습니다. 텍스트 상자와 버튼, 나는 사각형의 폭 수정할

내 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'를 선언 할 때 시작 값을 수정하면 사각형이 지정된 너비를 사용합니다. 그러나 버튼을 통한 업데이트는 messagebox를 제외하고는 아무 것도하지 않습니다. 보시다시피, 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의 MainWindow를,의 이름입니다.

+0

[이 답변보기] (http://stackoverflow.com/a/13956932/5615980) – Ron