2010年5月17日月曜日

ContextMenuのRoutedCommandでハマッタ話

ContextMenuのMenuItemに付けたCommandが灰色(CanExecute==False)になって
実行できない、ということで詰まっていました。
ContextMenuが別ウィンドウ扱い(?)的なことでダメなんだろうなぁと思っていたけど、
解決策をずっと探していて、以下のサイトですっきり解決しました。
http://www.wpftutorial.net/RoutedCommandsInContextMenu.html

これでCommandはちゃんと実行できるし、
イベントハンドラには、引数senderにContextMenuを持っているUI要素が入ってくるので、
UI要素のResourceなどにもアクセスできるようになりました。

2010年5月14日金曜日

MediaPlayerの使い方メモ

・SoundPlayer→軽量だがwavしか再生できない
・Mediaplayer→mp3とかも再生できる

というわけでMediaPlayerを使って最初に書いたコードが以下。


   var player = new MediaPlayer();
   player.Open(new Uri("Resource/sound.mp3", UriKind.Relative));
   player.Play();
   player.Close();

しかしこれでは動かない。
改善すべきは2点。
・Play()は非同期なので、直後にClose()を呼び出すとすぐPlay()が終了する
・同様にPlay()は非同期なので、playerがメソッドローカル変数だと再生が終わる前に
(GCで回収されて?)なくなって、再生されない

というわけで対策は
・MediaPlayerを入れる変数playerはクラス変数に
・Close()は別の箇所に書く

2010年5月7日金曜日

ContextMenuのStyle変更

違うかもしれない

  <Style x:Key="{x:Type ContextMenu}" TargetType="{x:Type ContextMenu}">
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate>
      <Border BorderBrush="Black" BorderThickness="3" CornerRadius="5">
       <StackPanel IsItemsHost="True" Background="Wheat"/>
      </Border>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>