2011-01-08 2 views
0

bindable richTextbox가 필요하기 때문에 richTextBox로 사용자 컨트롤을 시도합니다.richTextBox, bindable richTextBox가있는 사용자 정의 컨트롤

여기에 해결책을 찾았습니다 : Richtextbox wpf binding.

Arcturus의 솔루션을 사용하고 싶습니다. richTextBox 컨트롤을 사용하여 사용자 정의 컨트롤을 만들고 종속성 속성을 사용합니다. 코드 숨김에서

<UserControl x:Class="WpfApplication2.BindableRichTextBoxControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <RichTextBox Name="RichTextBox" Grid.Row="0"/>  
    </Grid> 
</UserControl> 

:

public partial class BindableRichTextBoxControl : UserControl 
{ 
    public static readonly DependencyProperty DocumentProperty = 
    DependencyProperty.Register("Document", typeof(FlowDocument), typeof(BindableRichTextBoxControl), 
    new PropertyMetadata(OnDocumentChanged)); 

    public FlowDocument Document 
    { 
     get { return (FlowDocument)GetValue(DocumentProperty); } 
     set { SetValue(DocumentProperty, value); } 
    } 

    private static void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var control = (BindableRichTextBoxControl)d; 
     if (e.NewValue == null) 
      control.RichTextBox.Document=new FlowDocument(); 

     //? 
     control.RichTextBox.Document = document; 
    } 


    public BindableRichTextBoxControl() 
    { 
     InitializeComponent(); 
    } 
} 

나는 작은 OnDocumentChanged 방법의 마지막 줄과 혼동하고

는 XAML에서 난 단지 제어를 RichTextBox있다. 내가 식별 할 수

 control.RichTextBox.Document = document; 

는 varibale 문서 것입니다.

private static void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    RichTextBoxControl control = (RichTextBoxControl) d; 
    if (e.NewValue == null) 
     control.RTB.Document = new FlowDocument(); //Document is not amused by null :) 
    else 
     control.RTB.Document = e.NewValue; 
} 

하지만 난 당신이 자신의 원래의 대답에 코멘트를 남겨 추천 :

답변

0

나는 그가이 의미 생각합니다.