SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight/WPFで使える逆引きTips集

Silverlight/WPFで使える逆引きTips集
――インクキャンバス機能

(6) InkCanvasコントロール

ダウンロード InkCanvas_WPF_VB.zip (2.0 MB)
ダウンロード InkCanvas_WPF_CS.zip (72.0 KB)

05.ペンの色を変更する

 ペンの色を変更するには、DefaultDrawingAttributes プロパティを使用します。DefaultDrawingAttributes プロパティには System.Windows.Ink.DrawingAttribute クラスのインスタンスを指定します。

 通常の色を使用するには Color プロパティを、蛍光ペンのような色を使用するには IsHighlighter プロパティを使用します。

 下記はペンの色を設定する例です。ラジオボタンで「通常ペン」または「蛍光ペン」を選択することができます。またスライダーコントロールでアルファ値(透明度)や色を変更することができます。

ペンの色を変更する
ペンの色を変更する
XAMLの例
<StackPanel>
    <Grid Height="126">
         <GroupBox Header="ペンの種類" HorizontalAlignment="Left">
            <StackPanel>
                <RadioButton Content="通常ペン" Name="radioNormalPen" />
                <RadioButton Content="蛍光ペン" Name="radioHighlightPen" />
            </StackPanel>
        </GroupBox>
        <TextBlock Text="アルファ" VerticalAlignment="Top" />
        <TextBlock Text="赤" VerticalAlignment="Top" />
        <TextBlock Text="緑" VerticalAlignment="Top" />
        <TextBlock Text="青" VerticalAlignment="Top" />
        <Slider Name="SliderA" Minimum="0" Maximum="255"/>
        <Slider Name="SliderR" Minimum="0" Maximum="255"/>
        <Slider Name="SliderG" Minimum="0" Maximum="255"/>
        <Slider Name="SliderB" Minimum="0" Maximum="255"/>
    </Grid>
    <InkCanvas Name="InkCanvas1" EditingMode="Ink" />
</StackPanel>
VBの例
'***** 追加 *****
Imports System.Windows.Ink

' 描画属性用変数
Private inkDA As New DrawingAttributes

Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    radioHighlightPen.IsChecked = True

    'ペン幅の初期化(20にする)
    inkDA.Width = 20
    inkDA.Height = 20
    'ペンの色を黒で初期化
    inkDA.Color = Colors.Black

    '上で作成した属性値をキャンバスにセット
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

' 通常ペン
Private Sub radioNormalPen_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles radioNormalPen.Checked
    '蛍光ペンをオフ(通常のペン)
    inkDA.IsHighlighter = False
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

' 蛍光ペン
Private Sub radioHighlightPen_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles radioHighlightPen.Checked
    '蛍光ペンをオン
    inkDA.IsHighlighter = True
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

' アルファ変更時
Private Sub Slider_ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles SliderA.ValueChanged, SliderR.ValueChanged, SliderG.ValueChanged, SliderB.ValueChanged
    UpdatePen()
End Sub

' スライダーの設定を反映させる
Private Sub UpdatePen()
    Dim penColor As New Color

    'ペンの色を作成
    penColor = Color.FromArgb(
        Convert.ToByte(SliderA.Value),
        Convert.ToByte(SliderR.Value),
        Convert.ToByte(SliderG.Value),
        Convert.ToByte(SliderB.Value))

    '作成した色をペンに割り当てる
    inkDA.Color = penColor
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub
C#の例
// 追加
using System.Windows.Ink;

// 描画属性用変数
private DrawingAttributes inkDA = new DrawingAttributes();

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    radioHighlightPen.IsChecked = true;

    // ペン幅の初期化(20にする)
    inkDA.Width = 20;
    inkDA.Height = 20;

    //ペンの色を黒で初期化
    inkDA.Color = Colors.Black;

    // 上で作成した属性値をキャンバスにセット
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

// 通常ペン
private void radioNormalPen_Checked(object sender, RoutedEventArgs e)
{
    // 蛍光ペンをオフ(通常のペン)
    inkDA.IsHighlighter = false;
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

// 蛍光ペン
private void radioHighlightPen_Checked(object sender, RoutedEventArgs e)
{
    // 蛍光ペンをオン
    inkDA.IsHighlighter = true;
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

// アルファ変更時
private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    UpdatePen();
}

// スライダーの設定を反映させる
private void UpdatePen()
{
    Color penColor = new Color();

    // ペンの色を作成
    penColor = Color.FromArgb(
        Convert.ToByte(sliderA.Value),
        Convert.ToByte(sliderR.Value),
        Convert.ToByte(sliderG.Value),
        Convert.ToByte(sliderB.Value));

    // 作成した色をペンに割り当てる
    inkDA.Color = penColor;
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}
ポイント

 ペンの色を変更するには DefaultDrawingAttributes プロパティを使用する。

 通常の色は Color プロパティで、蛍光色のような色は IsHighlighter プロパティを使用する。

次のページ
06.滑らかな線を描く

この記事は参考になりましたか?

Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5666 2011/01/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー