2012-03-24 51 views
0

<StackPanel Height="650" Width="650" Background="Green" HorizontalAlignment="Center" VerticalAlignment="Center"> <ItemsControl Name="Display_Test" Margin="10"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Background="Black" Width="600" Height="600"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <ContentPresenter Content="{Binding}" Margin="15" Height="500" Width="500"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel>關於在畫布

// C#代碼開始setbinding ================================= =================================== 公共部分類主窗口:窗口,INotifyPropertyChanged的 { 公共主窗口( ) { this.InitializeComponent();

 Canvas canvasSample = new Canvas(); 
     canvasSample.Width = 100; 
     canvasSample.Height = 100; 
     canvasSample.Background = new SolidColorBrush(Colors.LightBlue); 
     CanvasList.Add(canvasSample); 

     Canvas canvasSample2 = new Canvas(); 
     canvasSample2.Width = 100; 
     canvasSample2.Height = 100; 
     canvasSample2.Background = new SolidColorBrush(Colors.LightGreen); 

     CanvasList.Add(canvasSample2); 

     Rectangle rectangleSample = new Rectangle(); 
     rectangleSample.Width = 30; 
     rectangleSample.Height = 30; 
     RectangleList.Add(rectangleSample); 

     Rectangle rectangleSample2 = new Rectangle(); 
     rectangleSample2.Width = 30; 
     rectangleSample2.Height = 30; 
     RectangleList.Add(rectangleSample2); 

     Display_Test.ItemsSource = CanvasList; 

     this.MouseDoubleClick += new MouseButtonEventHandler(MainWindow_MouseDoubleClick); 
    } 

    void MainWindow_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 

     for (int nCanvasNum = 0; nCanvasNum < CanvasList.Count; nCanvasNum++) 
     { 
      Binding conBinding = new Binding() 
      { 
       Source = RectangleList 
      }; 
      CanvasList[nCanvasNum].DataContext = RectangleList; 
      CanvasList[nCanvasNum].SetBinding(ItemsControl.ItemsSourceProperty, conBinding); 
     } 
    } 

    ObservableCollection<Canvas> _canvasList = new ObservableCollection<Canvas>(); 
    public ObservableCollection<Canvas> CanvasList 
    { 
     get { return _canvasList; } 
     set 
     { 
      _canvasList = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("CanvasList")); 
     } 
    } 

    ObservableCollection<Rectangle> _rectangleList = new ObservableCollection<Rectangle>(); 
    public ObservableCollection<Rectangle> RectangleList 
    { 
     get { return _rectangleList; } 
     set 
     { 
      _rectangleList = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("RegtangleList")); 
     } 
    } 

    #region INotifyPropertyChanged Members 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, e); 
     } 
    } 
    #endregion 
} 

// C#代碼端====================================== ==============================

當我點擊mousebutton double我想在CanvasList中創建RectangleList ... 但我恐怕我不能表明...我認爲這是問題,因爲setbinding ... 我會等待你的回答....

回答

0

CanvasList[nCanvasNum].SetBinding(ItemsControl.ItemsSourceProperty, conBinding);將無法​​工作bevause畫布不派生從ItemsControl並沒有ItemSource屬性。它具有子項屬性,但它不是依賴項屬性,因此您無法綁定到它,但可以手動添加子項目。你可以嘗試使用ItemsControl的,而不是帆布,並設置畫布作爲ItemsControl的面板,你這樣做是爲了顯示畫布以同樣的方式

+0

你可以嘗試使用ItemsControl的,而不是帆布的,並設置畫布作爲面板的ItemsControl以同樣的方式你這樣做是爲了顯示畫布 ==>我不明白......我有很多的畫布...但是你告訴我的畫布,並設置畫布作爲ItemsControl的面板....? 爲〔實施例) <==你menas ???? nalsandori 2012-03-24 07:24:12

+0

一步一步來。用ItemsControlList替換你的CanvasList,看看你的RectanglesList的綁定是否有效。然後用ItemsControlList面板工作來獲取所需的外觀 – Nikolay 2012-03-24 07:45:37

+0

好吧,我知道了......但我需要setbinding 所以,我添加的DependencyProperty然後改變MainWindow_MouseDoubleClick 公共靜態只讀的DependencyProperty ItemsProperty = DependencyProperty.Register(「RectangleList」的typeof(的ObservableCollection )的typeof(主窗口),NULL); MainWindow_MouseDoubleClick(對象發件人,MouseButtonEventArgs E) { 綁定conBinding =新的Binding() { 源= RectangleList, }; BindingOperations.SetBinding(CanvasList [0],MainWindow.ItemsProperty,conBinding); } – nalsandori 2012-03-24 15:04:32