と既存のコンテンツの両方をサポートするユーザー コントロール ( ) を持つことは可能ですか? s は Control ( ) から継承する場合にのみ使用する必要があることを理解しましたが、UserControl.xaml が空の場合にも使用できることがわかりました。public MyControl: UserControl
ControlTemplate
ControlTemplate
public MyControl: Control
UserControl
次のように、2 つの長方形が並んでいるコントロールがあるとします。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid ShowGridLines="true" Height="100" Width="100">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle Name="left" Grid.Column="0" Height="90" Fill="LightBlue"/>
<Rectangle Name="right" Grid.Column="1" Height="100" Fill="LightGreen"/>
</Grid>
</Page>
コントロールのユーザーが、それらの長方形を自分が使いたいものに置き換えられるようにしたいと思いFrameworkElement
ます。だから私はが必要ControlTemplate
です。
しかし、99% のケースで、コントロールのユーザーは既存の機能に満足しているので、次のように言ってもらいたいと思います:
コードビハインド:
mycontrol.Left.Fill = ....
XAML:
<mycontrol>
<mycontrol.Left.Fill = "Red"/>
</mycontrol>
コントロール テンプレートをサポートしている場合、実際には UI 要素や xaml がないため、これは不可能のようです。コードビハインドファイルしかありません。私は、DependencyProperty
Left
あまり役に立たないコンテンツを保持する何らかのコンテナを持っていない限り、可能だと思います。コード ビハインド ファイルでグリッドを作成する必要があります。良い考えではないようです。
そして最後に、ユーザーがパーツのタイプを指定できるようにジェネリックを使用できるようにしたいと思います。
MyControl mycontrol<TLeft, TRight> = new MyControl<Rectangle, Button>();
これは、型の安全性 (FrameworkElement
正しい型にキャストする必要がない) のため、コード ビハインドに役立ちます。残念ながら、ジェネリックは XAML 側で実際にサポートされているとは思いません。
この問題の解決策はありますか、それとも本当に「ControlTemplate
s をサポートするために Control から継承しますが、コントロールの使いやすさを失います。使いやすさをサポートするために UserControl から継承しますが、ControlTemplate
サポートを失います」?