2014-09-21 4 views
0

В приложении WPF легко получить доступ к контенту MainWindow, но как это сделать в usercontrol.Доступ к Application.MainWindow в usercontrol

В приложении WPF, если мое имя MainWindow является Window1, и мне нужно получить доступ к его одной из строковых переменных с именем CName из другого класса в том же приложении.

Window1 ww = Application.Current.MainWindow as Window1; 

String reqstring = ww.CName ; 

Я хочу сделать то же самое в usecontrol тоже.

Пусть мое имя UserControl является ABCcontrol и первым/Имя главного класса ABCconrolLib

namespace ABCcontrol 
{ 

    public partial class ABCcontrolLib : UserControl 
    { 
    Public String CName = "ABC"; 

    //.... 

    } 
} 

Теперь я хочу, чтобы получить доступ к этой CNAME в другом классе же UserControl с помощью Application.Control.MainWindow или каким-либо другим Подобный способ

Пожалуйста, помогите мне, как это мой первый UserControl в WPF

+0

Как и когда вы устанавливаете свойство 'CName' в' UserControl'? – Sandesh

+0

Вы хотите получить доступ к окну внутри UserControl в коде или коде XAML? –

+0

хотите получить доступ к окну/контенту в коде/некоторой другой функции класса. Я могу очень легко получить доступ в приложении WPF, но не могу сделать это в пользовательском управлении. –

ответ

1

вы можете получить доступ к Application.Current.MainWindow, потому что у вас есть только один экземпляр MainWindow в целом приложение таким образом они определили его s статическое свойство. Если у вас есть такая же характеристика для вашего пользователя (просто вам нужно использовать один экземпляр этого объекта во всем приложении), вы также можете определить статическое свойство. Что-то вроде: , то вы можете получить доступ к имени свойства как UserControl1.Instance.CName

public partial class UserControl1 : UserControl 
     { 
      public static UserControl1 Instance 
      { 
       get; 
       private set; 
      } 
    Public String CName = "ABC"; 
      public UserControl1() 
      { 

       if (Instance != null)// there should be just one instance 
        throw new NotSupportedException(); 
       Instance = this; 

       InitializeComponent(); 
      } 
     } 

если вы получаете сообщение об ошибке, то вы не только один экземпляр вашего UserControl, вы должны определить список и зарегистрируйте каждый экземпляр своих пользователей. Что-то вроде:

public partial class UserControl1 : UserControl 
    { 

     public UserControl1() 
     { 
      (App.Current as App).UserControl1List.Add(this); 

      InitializeComponent(); 
     } 
    } 
    public partial class App : Application 
    { 
     public App() 
     { 
      UserControl1List = new List<UserControl1>(); 
     } 
     public List<UserControl1> UserControl1List 
     { 
      get; 
      private set; 
     } 
    } 

, то вы можете добраться до каждого экземпляра типа (App.Current как приложение) .UserControl1List [0] ... или вы можете использовать словарь для хранения каждого UserControl там.

+0

Спасибо за внимание, но он находится в многопоточной среде :(, он дает ошибку, если я использую один и тот же пользовательский контроль более одного раза –

+1

Посмотрите на отредактированный ответ, здесь вы используете список внутри вашего класса App (или где-то еще) то вы регистрируете каждый экземпляр своего пользовательского элемента управления там – Mojtaba

Смежные вопросы