2016-12-14 5 views
0

мне нужно изменить значение из MainWindow из в Control внутри моей CustomControl. Так позволяет сказать, что я хочу изменить ЭтикеткиСодержимое внутри UserControlMyControl из MainWindow.xaml.WPF значение изменения ребенка внутри UserControl

Пример:

<UserControl x:Class="XXXXX.MyUserControl" 
. 
. 
. 
> 
    <Grid> 
     <Label x:Name="TestLabel"/> 
    </Grid> 
</UserControl> 

И в MainWindow.xaml: <MyUserControl x:Name="TestControl" />

Теперь, как я могу получить доступ к Label.Content из Xaml Designer в MainWindow.xaml?

Я ничего не нашел там, поэтому, надеюсь, кто-то знает, как это сделать.

Большое спасибо

+0

Итак, как выглядит ваш код? –

+0

Пробовали ли вы, чтобы пользовательский элемент управления использовал тот же контекст данных, что и основное окно? – Bryan

+0

@ Брайан, как это будет выглядеть? –

ответ

0

Добавлен Следуя вашей UserControl

<UserControl x:Class="XXXXX.MyUserControl" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
. 
. 
> 

иметь контроль пользователя Реализовать INotifyPropertyChanged

Добавление свойства в пользовательский элемент управления, как это

Private _LabelText As String 
    Public Property LabelText() As String 
     Get 
      Return _LabelText 
     End Get 
     Set(ByVal value As String) 
      _LabelText = value 
      OnPropertyChanged("LabelText") 
     End Set 
    End Property 

Обновите ярлык для привязки к этому свойству

<Label x:Name="TestLabel" Content="{Binding Path=LabelText}"/> 

Тогда в вашем MainWindow вы можете изменить свойство accourdingly

<MyUserControl x:Name="TestControl" LabelText="Testing" /> 

Тогда ваш код позади может также ссылаться на это свойство

+0

Ну да, это сработает, если я хочу установить Single или несколько свойств этой метки, но что, если я хочу установить сто? С помощью этого метода мне пришлось бы создать сотню новых свойств, которые были бы полностью негабаритными. Лучшим решением было бы непосредственно привязать свойство ярлыков от MainWindow.Xaml –

+0

@ DanielDirtyNativeMartin, о чем вы просите, было бы более целесообразно полностью удалить пользовательский элемент управления. Но если вы хотите, чтобы пользовательский элемент управления и привязывался к значениям для элементов управления, я думаю, что это то, что вы хотите – Bryan

+0

Из-за возможности повторного использования было бы очень полезно, если бы оно могло быть внутри UserControl и так просто, как могло бы быть. Нет ли реальной возможности доступа к Label внутри этого UserControl напрямую? Таким образом, у вас будет полный доступ ко всем свойствам этой метки. –

1

Expose настраиваемое свойство в вашем UserControl, как показано ниже

public partial class MyUserControl : UserControl 
{ 
    public MyUserControl() 
    { 
     InitializeComponent(); 

     var dpd = DependencyPropertyDescriptor.FromProperty(LabelContentProperty, typeof(MyUserControl)); 
     dpd.AddValueChanged(this, (sender, args) => 
     { 
      _label.Content = this.LabelContent;   
     }); 
    } 

    public static readonly DependencyProperty LabelContentProperty = DependencyProperty.Register("LabelContent", typeof(string), typeof(MyUserControl)); 

    public string LabelContent 
    { 
     get 
     { 
      return GetValue(LabelContentProperty) as string; 
     } 
     set 
     { 
      SetValue(LabelContentProperty, value); 
     } 
    } 
} 

В xaml MainWindow

<MyUserControl x:Name="TestControl" LabelContent="Some Content"/> 
Смежные вопросы