かずきのBlog
C#やJavaやRubyとメモ書き

目次

Blog 利用状況
  • 投稿数 - 426
  • 記事 - 1
  • コメント - 461
  • トラックバック - 112
ニュース
  • 思い出は、いっぱい。
コメント
プログラマ的自己紹介
  • C#とRubyを趣味で。Javaを仕事で使ってやってます。 WPFをコツコツ勉強中。 IDE大好き。Visual Studio, Eclipse, NetBeansを使用中
お気に入りのツール/IDE
  • Visual Studio 2008 std
  • Eclipse
  • NetBeans6.0以降
  • 自作のツール
プロフィール
  • 大田 一希
  • 1981年1月30日産まれ
  • AB型
  • 左利き
経歴
  • 1993年 海田中学校 入学
  • 1996年 広島県立安芸南高等学校 入学
  • 1999年 某大学 環境情報学科 入学
  • 2003年 某大学 大学院 環境学研究科 入学
  • 2005年 就職して上京
  • 今に至る
アクセサリ
  • あわせて読みたい
  • ログ解析ネット証券

書庫

日記カテゴリ

 

@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");
}

実行するとラベルだけど、ちゃんとクリックイベントが起きてることがわかる。フォームのクリックイベントで分岐なんてナンセンスだぜ。
image

とは言ったものの、こういうことが出来る柔軟さがある!ってのはわかるが、こういうことをしなきゃいけない!っていう微妙な感じ。

投稿日時 : 2008年7月10日 22:34
コメント
  • # re: [WPF][C#]ラベルにクリックイベントがない?
    JZ5
    Posted @ 2008/07/10 23:28
    一方ロシアはMouseDownを使った。
  • # re: [WPF][C#]ラベルにクリックイベントがない?
    渋木宏明(ひどり)
    Posted @ 2008/07/10 23:33
    >こういうことをしなきゃいけない!

    「ラベル」は、論理的にはクリックして何か起きるものではないからでは。

    「見た目ラベル」「論理的な動作はボタン」なら

    > ButtonのTemplateをLabelに

    が正しい選択だと思います。
  • # re: [WPF][C#]ラベルにクリックイベントがない?
    かずき
    Posted @ 2008/07/11 0:16
    >JZ5さん
    ロシアに完敗
  • # re: [WPF][C#]ラベルにクリックイベントがない?
    かずき
    Posted @ 2008/07/11 0:18
    >渋木宏明(ひどり)さん
    理想的な解だとは思ってますけど、メンドイっていう気持ちもある感じです…
    Styleに切り出しておくって感じが妥協点ですかね~

    っていうか元ネタは、ラベルクリックイベントで何をさせてるんだろう
  • # re: [WPF][C#]ラベルにクリックイベントがない?
    よねけん
    Posted @ 2008/07/11 10:25
    はじめまして。最近、WPFをやりはじめたので、
    記事を参考にさせていただいております。
    LabelやTextBlockはClickイベントないですよね。
    そこでとりあえずMouseUpイベントを利用しています。
    が、何か正攻法じゃないなと思っていたところです。

  • # re: [WPF][C#]ラベルにクリックイベントがない?
    かずき
    Posted @ 2008/07/11 22:22
    >よねけんさん
    はじめまして。
    見ていただいてありがとうございます。

    正攻法ではありますけど、若干めんどくさい感じですよね~。
  • # [WPF][雑記]WPFのコントロールを選ぶときは
    かずきのBlog
    Posted @ 2008/07/22 23:07
    [WPF][雑記]WPFのコントロールを選ぶときは
タイトル  
名前  
Url
コメント