2012-11-08 3 views
1

사용자 컨트롤 텍스트 상자를 만들고 사용자 정의 텍스트 상자에 입력 한대로 텍스트 블록을 바인딩하고 싶습니다. 몇 가지 코드를 시도하지만 작동하지 않습니다. 누구나 가르쳐 줄 수 있니? 감사합니다usercontrol의 텍스트 상자에있는 텍스트를 텍스트 블록에 바인딩하는 방법은 무엇입니까?

내에서 UserControl 텍스트 상자 :

<Grid Background="Silver" Style="{StaticResource EntryFieldStyle}" Width="175" Height="25" Margin="0" >   
    <TextBox Name="watermarkTextBox" Background="Green" />  
</Grid> 

내 XAML 코드 :

<StackPanel Orientation="Horizontal"> 
     <UserControls:WatermarkTextBox x:Name="usernameArea"/> 
     <TextBlock Text="{Binding ElementName=usernameArea Path=watermarkTextBox.Text}" FontSize="13" Foreground="White"/> 
</StackPanel> 

답변

1

Edit2가 :이에서 INotifyPropertyChanged를 구현와 함께 종속성 속성을 사용하는 한 가지 방법.

텍스트 상자의 텍스트가 변경 될 때마다 PropertyChangedEvent가 실행됩니다. 창 창은 WatermarkTextBox의 WatermarkText 종속성 속성에 액세스하여이 이벤트에 가입합니다. 여기

는 보이는 방법은 다음과 같습니다


WatermarkTextbox.xaml :

<TextBox Name="watermarkTextBox" ... 
     TextChanged="watermarkTextBox_TextChanged"/> 

WatermarkTextbox.xaml.cs :

public partial class WatermarkTextBox : UserControl, INotifyPropertyChanged 
{ 
    ... 
    public static readonly DependencyProperty WatermarkTextProperty = 
     DependencyProperty.Register("WatermarkTextProperty", typeof(String), 
     typeof(WatermarkTextBox), new PropertyMetadata(null)); 

    public String WatermarkText 
    { 
     get { return watermarkTextBox.Text; } 
     set { OnPropertyChanged("WatermarkText"); } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string name) 
    { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(name)); 
      } 
    } 
    private void watermarkTextBox_TextChanged(object sender, TextChangedEventArgs e) 
    { 
      WatermarkText = this.watermarkTextBox.Text; 
    } 

} 

[MainWindow를] .xaml가 :

 <TextBlock Text="{Binding ElementName=usernameArea Path=WatermarkText}" .../> 

dependency property을 추가하면 기본적으로 XAML (일반적으로 바인딩은 물론)의 수정을 위해 사용자 정의 컨트롤에 값을 표시 할 수 있습니다. 기본적으로 Background이 흰색이기 때문에


는 또한, 흰색보다 어두운 뭔가에 TextBlock의 특성을 Foreground (텍스트 색상)을 변경할 수 있습니다.

+0

나는 그 코드를하기 전에 .... 시도하지 않는다. = ( – 0070

+0

전경을 검은 색으로 변경 했습니까 – funseiki

+0

@ 0070 죄송합니다. 의존성 속성을 잊어 버렸습니다. 대답으로 해결책을 업데이트했습니다.이 기능은 나를 위해 작동했습니다. – funseiki

관련 문제