ペンの色を変更するには、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;
}
