Możesz zaproponować alternatywne podejście do mojego problemu, jeśli nie jest to najlepszy sposób na to.
Mam ToolBarTray i TreeView. Drzewo ma 2 przedmioty, które są odpowiednio klasami Concrete1 i Concrete2. Chcę, aby pasek narzędzi miał inne menu w zależności od tego, jaki rodzaj elementu jest wybrany w drzewie.
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<ToolBar.Style>
<Style TargetType="{x:Type ToolBar}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=tree, Path=SelectedItem, Converter={StaticResource convert}}" Value="{x:Type root:Concrete1}">
<!--what do i do here??-->
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=tree, Path=SelectedItem, Converter={StaticResource convert}}" Value="{x:Type root:Concrete2}">
<!--what do i do here??-->
</DataTrigger>
</Style.Triggers>
</Style>
</ToolBar.Style>
<ToolBar.Resources>
<Menu x:Key="awd">
<MenuItem Header="AWD"></MenuItem>
</Menu>
<Menu x:Key="dwa">
<MenuItem Header="DWA"></MenuItem>
</Menu>
</ToolBar.Resources>
</ToolBar>
</ToolBarTray>
<TreeView x:Name="tree" ItemsSource="{Binding Families}"></TreeView>
Doszedłem do tego, że mogłem ustawić dowolną regularną właściwość (tło itp.) Paska narzędzi, w zależności od tego, który element został wybrany.
Odpowiedzi:
0 dla odpowiedzi № 1Myślę, że już to zrozumiałem. Zrobiłem to tylko za pomocą ContextMenu i poza wyzwalaczem stylu, ale wyobrażam sobie, że to ta sama zasada.
<TreeView>
<TreeView.ContextMenu>
<ContextMenu>
<StaticResourceExtension ResourceKey="myMenuItem"></StaticResourceExtension>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>