ペンの色を変更する

スポンサーリンク

ペンの色を変更するには、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 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;
}
タイトルとURLをコピーしました