2017-06-13 27 views
0

我想從另一個用戶控件切換矩形的可見性。我相信我當前的代碼不工作,因爲我創建了第一個用戶控件的新實例,而我應該從舊的實例引用。不幸的是,我不知道如何提供這個參考。如何從另一個用戶控件訪問控件而無需數據綁定?

用戶控制1:

public one() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Window window = new Window 
     { 
      Title = "Second User Control", 
      Content = new two(), 
      WindowStartupLocation = WindowStartupLocation.CenterScreen, 
      ResizeMode = ResizeMode.NoResize 
     }; 
     window.ShowDialog(); 
    } 

用戶控制2:

one oneUC; 
public two() 
    { 
     InitializeComponent(); 
     oneUC = new one(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     oneUC.rectangleControl.Visibility = Visibility.Hidden; 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     oneUC.rectangleControl.Visibility = Visibility.Visible; 
    } 

關注:

  1. 我知道這是不是一個好的做法,以做到這一點但我只使用wpf來創建這個非常簡單的個人項目。這個小項目完成後,我也完成了wpf。
  2. 沒有數據綁定

回答

0

用戶控制1:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
    two tw = new two(); 
    tw.oneUC = this; 
     Window window = new Window 
     { 
      Title = "Second User Control", 
      Content = tw, 
      WindowStartupLocation = WindowStartupLocation.CenterScreen, 
      ResizeMode = ResizeMode.NoResize 
     }; 
     window.ShowDialog(); 
    } 

用戶控制2:

public two() 
    { 
     InitializeComponent(); 
    } 

在用戶控件1,你需要創建用戶控制2組用戶控制1合併爲一個U變量。 在用戶控件2構造函數中,您必須刪除一個U = new one(); 它會爲你工作。

+0

簡單,清晰,簡潔,我喜歡它!謝謝。 –

0

髒版

創建一個單獨的類,將有機會獲得所有用戶控件,例如:

public static class Container 
{ 
    public static UserControl1 Control1 {get;set;} 
    public static UserControl2 Control2 {get;set;} 
} 

在形式的構造函數(後的InitializeComponent())assing您的控件獨居變量像這樣:

Container.Control1 = control1; 
Container.Control2 = control2; 

然後在UserControl2中,您可以執行以下操作:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Container.Control1.rectangleControl.Visibility = Visibility.Hidden; 
} 
+1

出於好奇,我試過這個,它工作,但我回到其他答案,因爲我發現它更乾淨。只是想讓你知道,我很欣賞答案,並投了票(它得到了記錄,但沒有反映,因爲他們說我需要大約15分)。 –

+0

當然!容器解決方案稍微簡單一些,因爲所有的引用都在一個地方。我標記爲'髒',因爲在較大的項目中,首選的方法是使用EventAggregator和MVVM –

相關問題