スケジューリンググリッドに項目を表示するコントロールを作成しようとしています。そのカテゴリに応じて水平に配置されます。アイテムが完了するまでにどれくらいの時間がかかります。私は現在、System.Windows.Controls.Controlから継承していますし、デフォルトのスタイルとテンプレートを以下に示します。データ型を使用するWPFコントロールを作成する
<Style TargetType="KHS:TimeGrid">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="KHS:TimeGrid">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
<DockPanel>
<Grid Name="PART_HeaderGrid" DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding ActualWidth, ElementName=TimeColumn}"/>
</Grid.ColumnDefinitions>
</Grid>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<Grid Name="PART_BodyGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Name="TimeColumn" Width="Auto"/>
</Grid.ColumnDefinitions>
</Grid>
</ScrollViewer>
</DockPanel>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
私の項目については、私は単純に、このインターフェイスを使用します。
Public Interface ITimeGridItem
Property StartTime As Date
Property Duration As TimeSpan
End Interface
行をに追加されます各時間の増加分(デフォルトでは15分を表す)の "BodyGrid"と、開始時間と継続時間に基づいてGrid.RowとGrid.RowSpanの値が与えられます。
アイテムのDataTemplatesを実装しようとすると、問題が発生します。私は現在、アイテムを表示するためにContentPresentersを使用しようとしています。 TimeGridのItemTemplateプロパティを作成し、それをすべてのアイテムに使用するのは簡単ですが、ユニークなテンプレートでさまざまなタイプのアイテムをテンプレート化する必要がある場合はどうすればよいでしょうか?
他のコントロールで、DataTemplatesをさまざまなDataTypesでリソースコレクションに追加する方法を考えました。コントロールはリソースを検索して適切なテンプレートを選択することができます。残念ながら、私はそれを実装する方法を理解することができませんでした。私はこれをどのように達成することができるか知っていますか?マイクロソフトはそのコントロールでそれを実行するので、可能でなければなりません。
"残念ながら私はそれを実装する方法を見つけ出すことができませんでした" - それは実装していないからです。それはちょうど起こる。暗黙的なDataTemplateがスコープ内にある場合は、それが使用されます。私はContentControlsのものを投げるだけで動作します。それを試して、私はそれが動作すると思う。 –
方向として、System.Windows.Controls.DataTemplateSelectorを見てください。それはあなたが望むものの鍵を握っているかもしれません。しかし、私は確信していません。 –