@ITの連載:VB研公開ゼミ議事録の「第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法」から引用。
WPFがWindowsフォームとどのように異なるかというと、例えばLabelコントロールにClickイベントが用意されていません。フォーム上の全コントロールのClickイベントをまとめて拾い、そこで条件分岐処理するような書き方になります。
ふむ。Labelコントロールには、確かにClickイベントが無い。じゃぁ、WPFでそういうものを作るとしたらどうするだろう?ということでやってみた。
やり方は簡単。クリックできるものの代表格といえばButton。ButtonのTemplateをLabelにしてしまえば、クリック可能なラベルの完成~。
<Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Clickable Label!!" Height="300" Width="300">
<StackPanel>
<Button Content="クリック可能なラベル" Click="Button_Click">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Label Content="{TemplateBinding Content}" />
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</Window>
ボタンクリックのイベントの中は下のようにメッセージボックスを出すようにしてみた。
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("OK");
}
実行するとラベルだけど、ちゃんとクリックイベントが起きてることがわかる。フォームのクリックイベントで分岐なんてナンセンスだぜ。
とは言ったものの、こういうことが出来る柔軟さがある!ってのはわかるが、こういうことをしなきゃいけない!っていう微妙な感じ。