2016-10-14 3 views
0

아이콘을 동적으로 생성 된 MenuItem 컨트롤에 바인딩하고 싶습니다. x : Shared 특성을 False로 설정하려고했지만 항상 마지막 항목에만 아이콘이 있습니다.WPF MenuItem 아이콘 공유

<Window.Resources> 
    <Style TargetType="{x:Type MenuItem}" x:Key="MenuItemStyle" x:Shared="False"> 
     <Setter Property="Icon"> 
      <Setter.Value> 
       <Image Source="{Binding IconSource}" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

그리고 MenuItem의 정의 : : 이미 이미지 컨트롤하지만 운에이 공유 속성을 설정하려고 한

<MenuItem Header="Workspaces" ItemsSource="{Binding WorkspaceItems}" Icon="{StaticResource BranchIcon}" ItemContainerStyle="{StaticResource MenuItemStyle}" /> 

여기 내 메뉴 아이템 ItemContainerStyle 코드 스타일입니다.

의견이 있으십니까?

+0

Visual Studio 출력 창에 바인딩 오류/경고가 표시됩니까? – haindl

+0

아니요, 편집 가능합니다. 그리고 그것은 하나의 항목에 대해서만 작동합니다. 스타일이 항상 하나의 부모 만 가질 수 있기 때문에 스타일이 항상 바뀌면이 문제가 발생한다는 것을 알고 있습니다. 하지만 모든 사람들은 x : Shared 특성으로 수정할 수 있다고 말합니다. 어쩌면 내가 뭔가를 놓친 것 같은데, 왜 효과가 없는지 모르겠다. – Panthesilea

답변

3

거의 다 왔어! 모든

첫째는 : 당신이 이미지 컨트롤에 아이콘 속성을 설정하는 경우 Template vs Style.

에 의해 혼동하지 말고, 하나의 복사본이 생성됩니다. 컨트롤은 하나의 부모 만 가질 수 있으므로 다시 할당 될 때마다 이전 부모에서 제거됩니다.

그래서 아이콘 하나만 표시됩니다. 대신

  • 사용 DataTemplate을, 그리고 (당신이 달성하려고 무엇을) 공유 이미지 구성 요소와 스타일을 사용하십시오 MenuItem을
  • 의 전체 템플릿을 다시 정의 :

    당신은 당신이 원하는 2 개 솔루션을 가지고

유일한 오류는 전체 스타일이 아니라 이미지 리소스에서 공유 속성이 false 여야한다는 것입니다. 작동해야 함 :

<Window.Resources> 
    <Image x:Key="MenuIconImage" x:Shared="false" Source="{Binding IconSource}"/> 

    <Style TargetType="{x:Type MenuItem}" x:Key="MenuItemStyle" BasedOn="{StaticResource {x:Type MenuItem}}"> 
     <Setter Property="Icon" Value="{StaticResource MenuIconImage}"> 
     </Setter> 
    </Style> 
</Window.Resources> 

희망이 있습니다.

+0

감사합니다. 공유 된 이미지 구성 요소를 시도하고 작동합니다 :) – Panthesilea

관련 문제