ペンの太さ/形状を設定する

ペンの太さや形状を変更するには、DefaultDrawingAttributes プロパティを使用します。

DefaultDrawingAttributes プロパティにはSystem.Windows.Ink.DrawingAttribute クラスのインスタンスを指定します。

太さは幅(Widthプロパティ)と高さ(Heightプロパティ)を指定することができ、幅の細いペンや太いペンを作成することができます。

また、ペンの形状は StylusTipプロパティ にEllipse(円)やRectangle(四角形)を設定することができます。

下記はペンの太さや形状を設定する例です。

ラジオボタンで線の形状「●」または「■」を選択することができ、スライダーコントロールで太さを変更することができます。

ペンの太さや形状を設定する例

XAMLの例

<StackPanel>
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="ペンの形状:" TextAlignment="Right" />
        <RadioButton Content="●" Name="RadioButton1" IsChecked="True" />
        <RadioButton Content="■" Name="RadioButton2" />
        <TextBlock Text="太さ:" />
        <TextBox Text="{Binding ElementName=Slider1, Path=Value, Mode=TwoWay}" />
        <Slider Name="Slider1" Width="107" Minimum="1" 
                SmallChange="1" IsSnapToTickEnabled="True" Maximum="20" />
    </StackPanel>
    <InkCanvas Name="InkCanvas1" EditingMode="Ink">
        <InkCanvas.DefaultDrawingAttributes>
            <DrawingAttributes Width="1" Height="1" StylusTip="Rectangle"/>
        </InkCanvas.DefaultDrawingAttributes>
    </InkCanvas>
</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
    '初期化
    inkDA.Width = 1     'ペンの幅
    inkDA.Height = 1    'ペンの高さ
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

' ペンの形状を●にした場合
Private Sub RadioButton1_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles RadioButton1.Checked
    If IsNothing(InkCanvas1) Then Return

    '楕円形の先端に設定
    inkDA.StylusTip = StylusTip.Ellipse

    '属性をセット
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

' ペンの形状を■にした場合
Private Sub RadioButton2_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles RadioButton2.Checked
    '楕円形の先端に設定
    inkDA.StylusTip = StylusTip.Rectangle

    '属性をセット
    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

' ペンの太さ変更時の処理
Private Sub Slider1_ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles Slider1.ValueChanged
    If IsNothing(InkCanvas1) Then Return

    'ペン先の幅と高さを設定
    inkDA.Width = Slider1.Value
    inkDA.Height = Slider1.Value

    InkCanvas1.DefaultDrawingAttributes = inkDA
End Sub

C#の例

// 追加
using System.Windows.Ink;

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

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // 初期化
    inkDA.Width = 1;    // ペンの幅
    inkDA.Height = 1;   // ペンの高さ
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

// ペンの形状を●にした場合
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
    if (inkCanvas1 == null)
        return;

    // 楕円形の先端に設定
    inkDA.StylusTip = StylusTip.Ellipse;

    // 属性をセット
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

// ペンの形状を■にした場合
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
    // 楕円形の先端に設定
    inkDA.StylusTip = StylusTip.Rectangle;

    // 属性をセット
    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

//ペンの太さ変更時の処理
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
    if (inkCanvas1 == null)
        return;

    // ペン先の幅と高さを設定
    inkDA.Width = slider1.Value;
    inkDA.Height = slider1.Value;

    inkCanvas1.DefaultDrawingAttributes = inkDA;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください