Button
とToggleButton
とRadioButton
に幾何学プロパティを設定して、ControlTemplatesでこれらのコントロールにインスタンス固有のジオメトリを割り当てるときに定型句を使用しないようにします。このGeometryButtonクラスでDependencyPropertyをクラス階層のAttachedPropertyに置き換えることは可能ですか?
<my:GeometryButton Geometry="{StaticResource OneGeometry}"/>
<my:GeometryButton Geometry="{StaticResource OtherGeometry}"/>
<!-- ...and inside the Style for GeometryButton: -->
<ContentControl TargetType="{x:Type my:GeometryButton}">
<Border>
<Path Data={TemplateBinding Geometry}/>
</Border>
</ContentControl>
:たとえば
、現在私はこの書くことができます
public class GeometryButton : Button
{
static GeometryButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(GeometryButton),
new FrameworkPropertyMetadata(typeof(GeometryButton)));
}
public Geometry Geometry
{
get { return (Geometry)GetValue(GeometryProperty); }
set { SetValue(GeometryProperty, value); }
}
public static readonly DependencyProperty GeometryProperty =
DependencyProperty.Register("Geometry",
typeof(Geometry),
typeof(GeometryButton),
new PropertyMetadata(default(Geometry)));
}
を問題は、私はGeometryToggleButton
とGeometryRadioButton
クラスを定義していた場合、私はになっています、ですDRYに違反する各クラスのDependencyPropertyコードを繰り返します。 また、RadioButtonはToggleButtonから派生し、ButtonとButtonはButtonBaseから派生しているので、私はこれを利用することができると思いますが、各クラスから別々に継承する必要がある場合は、継承のメリットはありません。
だから私はAttachedPropertiesを使用することが考えられるが、チュートリアルと例は、通常、いくつかの「親」の存在を示唆し、DockPanel.Dock
、Grid.Left
、またはControl.Foreground
のような例に言及、私はのわからない:
- い最初に、AttachedPropertiesの概念が私のユースケースに当てはまりますか?
- 「はい」の場合は、どうすれば実装できますか?
興味深い!あなたが提供した実装で、Buttonインスタンスに直接CornerRadiusを宣言することは可能でしょうか?例えば、 '? – heltonbiker
@heltonbiker ''依存関係プロパティと同様です。それはそれの美しさです!同じメカニズムが使用されます。テンプレートは値を取得します(つまり、それが求められれば取得します)。 –
さて、試して、フィードバックを投稿しよう!ありがとう! – heltonbiker