일종의 일정 그리드에 항목을 표시하는 컨트롤을 만들려고합니다. 그래서 어떤 범주에 속해 있으며 시간에 따라 세로로 배치됩니다 예정 시간 및 항목 완료까지 걸리는 시간 행이 추가됩니다데이터 형식을 사용하는 WPF 컨트롤 만들기
Public Interface ITimeGridItem
Property StartTime As Date
Property Duration As TimeSpan
End Interface
: 나는 단순히이 인터페이스를 사용하여 내 항목의
<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>
: 저는 현재 System.Windows.Controls.Control에서 상속하고 기본 스타일과 템플릿은 다음과 같습니다 각 시간 증가 (기본적으로 15 분을 나타냄)에 대한 "BodyGrid"및 시작 시간 및 지속 시간을 기준으로 Grid.Row 및 Grid.RowSpan 값이 항목에 제공됩니다.
항목에 대해 DataTemplates를 구현하려고하면 문제가 발생합니다. 현재 ContentPresenters를 사용하여 항목을 표시하려고합니다. TimeGrid의 ItemTemplate 속성을 만들어 모든 항목에 사용하기는 쉽지만 고유 한 템플릿을 사용하여 여러 유형의 항목을 템플릿으로 작성해야하는 경우 어떻게해야합니까?
다른 컨트롤에서 다른 DataTypes를 사용하여 자신의 리소스 컬렉션에 DataTemplates를 추가하고 컨트롤에서 리소스를 검색하고 올바른 템플릿을 선택하는 방법을 생각해 보았습니다. 불행히도 나는 그것을 구현하는 방법을 알아낼 수 없었다. 아무도 내가 이것을 어떻게 할 수 있는지 안다? Microsoft는 자신의 통제에서 그렇게하기 때문에 가능할 것입니다.
"불행히도 구현 방법을 파악하지 못했습니다."- 구현하지 않았기 때문입니다. 그냥 일어난다. 암시 적 DataTemplate이 범위에 있으면 사용됩니다. ContentControls에서 물건을 던지면 작동합니다. 해봐, 그게 효과가있을거야. –
방향으로, System.Windows.Controls.DataTemplateSelector를 조사하십시오. 그것은 당신이 원하는 것에 열쇠를 쥘 수 있습니다. 그러나 나는 확실하지 않다. –