前提・実現したいこと
こんばんは。
WPF + Visual Studio2015にてトグルボタンのメニューを作成中です。
トグルボタンを押した時に、展開してメニューが表示するようにしたいです。
今は、押しても何もメニューが展開されない状態です。
ViewModelでの、フラグの切り替えは出来ていますが、ContextMenuを展開するのにはどうしたら良いのかを調べています。
色々調べましたが、情報を探し出せなかった為、ご教授頂けますと幸いです。
発生している問題・エラーメッセージ
ContextMenuのIsOpenが認識されない状態で、メニューが開かない状態。
該当のソースコード
xmal
1 <Window.Resources> 2 <local:BindingProxy x:Key="Proxy" Data="{Binding}" /> 3 </Window.Resources> 4 5<Grid> 6 <StackPanel> 7 <Menu x:Name="menu" HorizontalAlignment="Left" Height="24" VerticalAlignment="Top" Width="519" Margin="0,0,-0.333,0"> 8 <MenuItem Header="ファイル"> 9 </MenuItem> 10 </Menu> 11 </StackPanel> 12 <StackPanel> 13 <ToolBar Margin="0,20,-0.333,0" Height="30"> 14 <ToggleButton IsChecked="{Binding ShowMeoDataOnly, Mode=TwoWay}"> 15 <ToggleButton.ContextMenu> 16 <ContextMenu DataContext="{StaticResource Proxy}" IsOpen="{Binding Data.ShowMeoDataOnly, Mode=TwoWay}"> 17 <MenuItem Command="{Binding Source={StaticResource Proxy}, Path=Data.MyCommand}"> 18 <MenuItem.Header> 19 <TextBlock Text="実行可能状態にする"/> 20 </MenuItem.Header> 21 </MenuItem> 22 <MenuItem Command="{Binding Source={StaticResource Proxy}, Path=Data.MyCommand}"> 23 <MenuItem.Header> 24 <TextBlock Text="移動する"/> 25 </MenuItem.Header> 26 </MenuItem> 27 <MenuItem Command="{Binding Source={StaticResource Proxy}, Path=Data.MyCommand}"> 28 <MenuItem.Header> 29 <TextBlock Text="ファイルから呼び出す"/> 30 </MenuItem.Header> 31 </MenuItem> 32 </ContextMenu> 33 34 </ToggleButton.ContextMenu> 35 <WrapPanel> 36 <StackPanel> 37 <TextBlock Text="操作内容" VerticalAlignment="Center" /> 38 </StackPanel> 39 <!--<Path Width="10" Height="5" Stretch="Fill" Fill="Black" Data="F1 M0,0 L10,0 L5,10 Z " />--> 40 <Border Width="8" /> 41 </WrapPanel> 42 43 </ToggleButton> 44 </ToolBar> 45 46 </StackPanel> 47 </Grid> 48
MainWindowViewModel
1 2 private bool _ShowMeoDataOnly = false; 3 public bool ShowMeoDataOnly 4 { 5 get 6 { 7 Console.WriteLine("Get Show Me Data >>" + _ShowMeoDataOnly); 8 return _ShowMeoDataOnly; 9 } 10 set 11 { 12 if( _ShowMeoDataOnly != value) 13 { 14 _ShowMeoDataOnly = value; 15 16 if(_ShowMeoDataOnly == true) 17 { 18 Console.WriteLine("Set Show Me Data >> Open "); 19 20 } 21 22 base.RaisePropertyChanged(() => ShowMeoDataOnly); 23 } 24 } 25 } 26
BindingProxy
1 2using System.Windows; 3 4// BindingProxy.csを作成 5 6 public class BindingProxy : Freezable 7 { 8 protected override Freezable CreateInstanceCore() 9 { 10 return new BindingProxy(); 11 } 12 13 public object Data 14 { 15 get { return (object)GetValue(DataProperty); } 16 set { SetValue(DataProperty, value); } 17 } 18 19 public static readonly DependencyProperty DataProperty = 20 DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null)); 21 }
試したこと
1)原因は、下記のURLに乗っている事だというところまでは突き止めたが、
MVVM的にどうすれば良いか分からなかった。
2)オリジナルで作る必要があるかと思い、下記を参考にしよう考えたが、
controls:CustomContextMenu の部分がどこからきているか、理解できなかった。
https://stackoverflow.com/questions/33688346/dynamically-create-contextmenu/33731677#33731677
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー