2010-03-13 6 views
15

'RichTextBox의 Height 속성을 GridView의 Row 속성에 바인딩하고 싶습니다. 어떻게해야합니까? xaml에서 Row에 접근 할 수 없기 때문에 Row의 Height를 얻는 방법을 모른다.wpf에서 부모 요소의 속성에 바인딩

조상 유형은 GridViewHeaderRow해야하지만, 나는 그것의 수준을 모른다 ...

편집 :

<my:RadGridView Height="524" RowHeight="300" ItemsSource="{Binding Lessons}" AutoGenerateColumns="False" Name="dataGrid1" VerticalAlignment="Top" SelectionMode="Single" CanUserSortColumns="False" IsFilteringAllowed="False"> 

      <my:RadGridView.Columns> 
       <my:GridViewDataColumn DataMemberBinding="{Binding SchoolclassName}" Header="Schoolclass" Width="0.1*" /> 
       <my:GridViewDataColumn DataMemberBinding="{Binding SubjectName}"  Header="Subject"  Width="0.1*" /> 

       <my:GridViewDataColumn Width="0.3*" Header="Homework"> 
        <my:GridViewDataColumn.CellTemplate> 
         <DataTemplate> 
          <RichTextBox Height="{Binding ElementName=dataGrid1,Path=RowHeight}" > 
           <FlowDocument> 
            <Paragraph> 
             <Run Text="{Binding Homework}"/> 
            </Paragraph> 
           </FlowDocument> 
          </RichTextBox>         
         </DataTemplate> 
        </my:GridViewDataColumn.CellTemplate> 


<my:RadGridView Height="524" ItemsSource="{Binding Lessons}" AutoGenerateColumns="False" Name="dataGrid1" VerticalAlignment="Top" SelectionMode="Single" CanUserSortColumns="False" IsFilteringAllowed="False"> 
      <my:RadGridView.Columns> 

       <my:GridViewDataColumn Name="ContentColumn" Width="0.3*" Header="Content"> 
        <my:GridViewDataColumn.CellTemplate> 
         <DataTemplate> 
          <RichTextBox Height="{Binding ElementName=MyRowNameToBindTo,Path=Height}"> 
           <FlowDocument> 
            <Paragraph> 
             <Run Text="{Binding Content}"/> 
            </Paragraph> 
           </FlowDocument> 
          </RichTextBox> 
         </DataTemplate> 
        </my:GridViewDataColumn.CellTemplate> 

...

답변

20

내가 모르는 당신 여기에 RadGridView. 하지만 가장 먼저 시도 할 것은 GridViewHeaderRow가 발견되어 Height 속성에 바인딩 될 때까지 FindAncestor로 바인딩하여 RelativeSource 바인딩을 사용하여 시각적 트리를 따라 가야합니다.

 
... Height="{Binding Height, 
       RelativeSource={RelativeSource Mode=FindAncestor, 
           AncestorType={x:Type GridViewHeaderRow }}}" ... 

트리를 따라 가서 RadGridView를 찾은 다음 머리글 행으로 다시 이동해야 할 수 있습니다.

 
... Height="{Binding Rows[0].Height, 
       RelativeSource={RelativeSource Mode=FindAncestor, 
           AncestorType={x:Type RadGridView }}}" ... 

 
... Height="{Binding HeaderRow.Height, 
       RelativeSource={RelativeSource Mode=FindAncestor, 
           AncestorType={x:Type RadGridView }}}" ... 

또는

RadGridView은 구현에 의존한다. 나는이에 오류가 발생할 왜 :

+0

내가/EDIT 업데이트 코드로 초기화 질문 변경 < "{ElementName을 = DataGrid1이, 경로 = rowHeight에 바인딩}"=를 RichTextBox 높이> 나는 RadGridView가 가지고있는, 잊고 ElementName을 통해 바인딩 할 수있는 RowHeight 속성 ... – msfanboy

+0

왜이 오류가 발생합니까? System.Windows.Data 오류 : 4 : 'ElementName = dataGrid1'참조로 바인딩 소스를 찾을 수 없습니다. BindingExpression : Path = RowHeight; DataItem = null; 대상 요소는 'RichTextBox'입니다 (Name = ''); 대상 속성이 'Height'(유형 'Double')입니다. – msfanboy

+0

괜찮 았던 이유가 너무 끔찍한 DataGrid를 너무 싫어합니다. 공개 double RowHeight {get; } 해당 종속성 속성 ... : S – msfanboy