2017-11-28 27 views
0

컨텍스트 메뉴의 UpDown 컨트롤과 "FileExplorerControl"이라는 사용자 정의 컨트롤 간의 바인딩을 만들고 싶습니다 (그러나 모든 컨트롤에서 시뮬레이트 할 수 있습니다 ...). 열려있는 상황에 맞는 메뉴를 실행하면 UpDown이 비어 있습니다. 숫자를 입력하면 효과가 발생합니다. 문제는 어디에 디버그 창에서/다른 컨트롤러의 글꼴 크기에 대한 WPF 바인딩

<view:FileExplorerControl Grid.Column="0" 
            Padding="5" 
            x:Name="LeftFileExplorer" 
            DataContext= 
       "{Binding LeftFileExplorerViewModel}"> 
       <view:FileExplorerControl.ContextMenu> 
        <ContextMenu> 
         <StackPanel> 
          <TextBlock>Font Size</TextBlock> 
          <xctk:IntegerUpDown Value="{Binding 
             ElementName=LeftFileExplorer, 
           Path=FontSize, Mode=TwoWay}" 
               Minimum="8" 
               Maximum="32"/> 
         </StackPanel> 
        </ContextMenu> 
       </view:FileExplorerControl.ContextMenu> 
     </view:FileExplorerControl> 

오류 메시지 : System.Windows.Data 오류 : 4 : 'ElementName을 = LeftFileExplorer'참조 바인딩에 대한 찾을 수 없습니다 소스. BindingExpression : Path = FontSize; DataItem = null; 대상 요소는 'IntegerUpDown'(Name = ''); 대상 속성이 '값'(유형 'Nullable`1')입니다.

+0

System.Windows.Data 오류 : 4 : 'ElementName = LeftFileExplorer'참조로 바인딩 소스를 찾을 수 없습니다. BindingExpression : Path = FontSize; DataItem = null; 대상 요소는 'IntegerUpDown'(Name = ''); 대상 속성이 '값'('Nullable'1'유형)입니다. – Patrik

답변

0

문제는 컨텍스트 메뉴가 기본 시각적 트리에 없으므로 ElementName이 작동하지 않는다는 것입니다. 컨텍스트 메뉴는 작고, 부모가없고, 몸체가없는 비주얼 트리입니다.

시각적 트리에 대한 링크는 ContextMenuPlacementTarget 속성입니다. 메뉴가 팝업되면 PlacementTarget이 컨텍스트 메뉴를 소유 한 컨트롤이됩니다. 이 경우는 view:FileExplorerControl입니다. 편리하게, 그것은 당신이 원하는 것입니다.

따라서 RelativeSource을 사용하여 ContextMenu을 얻은 다음 PlacementTarget 속성을 사용하여 FileExplorerControl을 얻으십시오.