więc mam Context Menu
I MenuItem
w nim, która wybucha na listę nazwisk:Jak ustawić ikonę w MenuItem ContextMenu podczas używania ItemContainerStyle
<ContextMenu>
<MenuItem Header="Set As Default For" ItemsSource="{Binding Source={StaticResource Names}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value={Binding Name}/>
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.DoSomething}" />
<Setter Property="CommandParameter" Value="{Binding }" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
Teraz powyższy kod działa plik i wyświetla Moje strony lista nazwisk. Teraz chciałbym dodać ikonę obok każdej nazwy przy użyciu opakowania URI .. Więc z this question widzę, że najlepszym sposobem na to jest do szablonu z Header
więc próbowałem to pierwszy jak pytanie
<ContextMenu>
<MenuItem Header="Set As Default For" ItemsSource="{Binding Source={StaticResource Names}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header">
<Setter.Value>
<StackPanel>
<Image Width="20" Height="20" Source="/MyProj;component/Resources/MyImg.png" />
<ContentPresenter Content="{Binding Name}" />
</StackPanel>
</Setter.Value>
</Setter>
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.DoSomething}" />
<Setter Property="CommandParameter" Value="{Binding }" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
ale to dało mi błąd:
Specified element is already the logical child of another element. Disconnect it first.
Więc po pewnym badań próbowałem:
<ContextMenu>
<MenuItem Header="Set As Default For" ItemsSource="{Binding Source={StaticResource Names}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<Image Width="20" Height="20" Source="/MyProj;component/Resources/MyImg.png" />
<ContentPresenter Content="{Binding Name}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.DoSomething}" />
<Setter Property="CommandParameter" Value="{Binding }" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
ale teraz wszystkie moje imiona są ControlTemplate i ikona nie jest wyświetlacz ed ...
Jak dodać ikonę do elementu menu Menu kontekstowe poprzez ItemContainerStyle?
EDIT
Próbowałem:
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="Icon">
<Setter.Value>
<Image Width="20" Height="20" Source="/MyProj;component/Resources/MyImg.png" />
</Setter.Value>
</Setter>
I dostać ikonę renderingu ale tylko dla ostatniego elementu w moim menu?
Albo użyć 'HeaderTemplate' zamiast' Header' i używać 'DataTemplate' zamiast' ControlTemplate' ale osobiście chciałbym ustawić właściwość '' Icon' jako kolejny Setter' w 'Style'. Twój kod umieści ikonę w części zawartości 'MenuItem', a nie' Icon' part – dkozl
@dkozl masz rację używając 'HeaderTemplate' i' DataTemplate' działa. I miałeś rację, ponieważ mój kod umieścił ikonę w nagłówku, co nie było tym, co zaplanowałem. Czy wiesz, jak ustawić ikonę przy użyciu URI Paczki w stylu? – user1
spróbuj ustawić ['x: Shared'] (https://msdn.microsoft.com/en-us/library/aa970778 (v = vs.110) .aspx) na false w stosunku do twojego stylu" like "