2012-08-02 2 views
2

작동하지 않습니다. 그래서 수정 된 TreeViewItem은 ImagedTreeViewItem입니다. 이 ImagedTreeViewItem는 이미지-제어 쇼에 대한 이미지를 포함하는 속성이 있습니다. ImagedTreeViewItem도 특성을 갖는 것을 확인 상기 ImagedTreeViewItem-아이콘이 폴더 아이콘 인 경우. 이 속성의 이름은 "IsFolder"입니다.내가 너무 텍스트 앞에 이미지를 표시하도록 수정 된 트 리뷰를 가지고 WPF

내 문제는 다음과 같습니다 I'm Binding the Ancestors-Property (here: The ImagedTreeViewItem) 내가 필요한 데이터를 얻을 수 있습니다. 내 Image-Control의 경우 완벽하게 작동합니다. 상황에 맞는 메뉴는 나중에 추가하지 않았습니다. 기본적으로는 동일한 명령이기 때문에 나는 이유를 이해하지 않습니다. 내가 두 번째 코드에서 바인딩이 조상을 찾을 수 있다고 생각

<TreeView.Resources> 
       <Style TargetType="{x:Type myClasses:ImagedTreeViewItem}"> 
        <Setter Property="HeaderedItemsControl.HeaderTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
<!-- Here it works!!! --> 
            <Image Height="16" Source="{Binding Path=Icon, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type myClasses:ImagedTreeViewItem}}}" Stretch="Fill" Width="16" /> 
            <TextBlock Margin="5,0" Text="{Binding}" /> 
            <StackPanel.ContextMenu> 
             <ContextMenu> 
<!-- Here not :(--> 
              <MenuItem Command="my:ImagedTreeView.AddFolder" Header="Add Folder" 
                   IsEnabled="{Binding Path=IsFolder, 
                   RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type myClasses:ImagedTreeViewItem}}}"> 
               <MenuItem.Icon> 
                <Image Source="folderadd16.png" /> 
               </MenuItem.Icon> 
              </MenuItem> 
              <!-- ... --> 
             </ContextMenu> 
            </StackPanel.ContextMenu> 
           </StackPanel> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </TreeView.Resources> 

:

다음은 XAML에서 내 "ImagedTreeView"의 코드입니다. 비주얼 스튜디오의 출력 창은 나에게 같은 이야기 :

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='....ImagedTreeViewItem', AncestorLevel='1''. BindingExpression:Path=IsFolder; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'IsEnabled' (type 'Boolean') 

답변

4

ContextMenu이 VisualTree의 일부가 아닌, 바인딩이 실패 이유가 있습니다. 검색 바인딩의 두 번째 흔적에 대한 캐시로 ContextMenu.PlacementTargetTag 재산 : 당신은 릴레이의 어떤 종류를 사용해야합니다. 나는 이것이 작동 할 것이라고 생각한다 :

<StackPanel Orientation="Horizontal" 
      Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type myClasses:ImagedTreeViewItem}}}"> 
    <StackPanel.ContextMenu> 
     <ContextMenu> 
      <MenuItem Command="my:ImagedTreeView.AddFolder" Header="Add Folder" 
         IsEnabled="{Binding Path=PlacementTarget.Tag.IsFolder, RelativeSource={RelativeSource AncestorType=ContextMenu}}"> 
       <MenuItem.Icon> 
        <Image Source="folderadd16.png" /> 
       </MenuItem.Icon> 
      </MenuItem> 
      <!-- ... --> 
     </ContextMenu> 
    </StackPanel.ContextMenu> 
+0

그것은 고맙다! – Hunv