カスタムコントロール用の動的背景ブラシを作成するには、これを行う必要があります(ContentControlを継承します)。私のカスタムコントロールには、StartColorとEndColorの2つの依存プロパティがあります。カスタムコントロールのコントロールテンプレートでは、コントロールはグラデーションの停止を伴うRadialGradientBrush
の背景の枠内にラップされます。 1つの勾配絞りの色はStartColorにバインドされ、もう1つの色はEndColorにバインドされます。私はXAMLでこの作業をしていますが、VBコードに変換する必要があります。私は次のようにVBのコードでは境界線を作成しようとしましたが、それはうまくいきませんでしたWPF:vbコード内のcontrolTemplateにあるグラデーション停止のcolorプロパティをバインドするにはどうすればよいですか?
<Style x:Key="{x:Type wpf:MyControl}"
TargetType="{x:Type wpf:MyControl}"
BasedOn="{StaticResource {x:Type ContentControl}}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type wpf:MyControl}">
...
<Border HorizontalAlignment="Stretch"
x:Name="background" Width="Auto"
Grid.RowSpan="3"
Opacity="0.9"
CornerRadius="{TemplateBinding CornerRadius}">
<Border.Background>
<Custom:RadialGradientBrush>
<Custom:GradientStop Color="{Binding Path=EndColor,
RelativeSource={RelativeSource TemplatedParent},
Mode=OneWay}"
Offset="0.462"/>
<Custom:GradientStop Color="{Binding StartColor,
RelativeSource={RelativeSource TemplatedParent},
Mode=OneWay}"
Offset="1"/>
</Custom:RadialGradientBrush>
</Border.Background>
</Border>
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
:
...
Dim backgroundBorder As New FrameworkElementFactory(GetType(Border))
With backgroundBorder
.Name = "background"
.SetValue(Grid.RowSpanProperty, 3)
.SetValue(Grid.OpacityProperty, 0.9)
.SetBinding(Border.CornerRadiusProperty, New Binding("CornerRadius") With {.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)})
End With
Dim backgroundBrush As New RadialGradientBrush()
Dim startColorGradientStop As New GradientStop()
startColorGradientStop.Offset = 1.0
BindingOperations.SetBinding(startColorGradientStop, GradientStop.ColorProperty, New Binding("StartColor") With {.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent), .Mode = BindingMode.OneWay})
backgroundBrush.GradientStops.Add(startColorGradientStop)
Dim endColorGradientStop As New GradientStop()
endColorGradientStop.Offset = 0.462
BindingOperations.SetBinding(endColorGradientStop, GradientStop.ColorProperty, New Binding("EndColor") With {.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent), .Mode = BindingMode.OneWay})
backgroundBrush.GradientStops.Add(endColorGradientStop)
backgroundBorder.SetValue(Border.BackgroundProperty, backgroundBrush)
...
XAMLでコントロールテンプレートの境界要素は、次のコードで行われます
私はこれをVBコードでどのように達成することができますか?
最初にこれは動作しませんでした。なぜなら、現在のプロジェクト名前空間をxamlに含めていたのですが、どのアセンブリを指定していなくても、これを変更してしまえば、すべてうまくいきました。 – Robin