[英]WPF Templates. Template Selector does not receive item
我目前的問題是我有兩個應該通過模板選擇器選擇的模板。 我已經定義了兩個數據模板。 每個包含不同的stackPanel,在包含元素的計數不同的意義上是不同的。
但是在我的模板選擇器中,我不能使用 select 模板之一,因為為 SelectTemplate 方法提供的項目始終是 null。
我假設還沒有理解模板如何在 wpf 中工作。 您在 microsfts 上看到的示例
在這里你可以看到我是如何定義我的數據模板的
<UserControl.Resources>
<DataTemplate x:Key="Any">
<StackPanel Orientation="Vertical">
<Label>Test</Label>
<Label>Test</Label>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="Non" >
<StackPanel Orientation="Vertical">
<Label>Test</Label>
</StackPanel>
</DataTemplate>
<selector:HeaderSelector
x:Key="ContentSelector"
AnyTemplate="{StaticResource Any}"
NonTemplate="{StaticResource Non}"/>
</UserControl.Resources>
User 控件定義了一個 ScrollView。 在這個 ScrollVewi 中,我放置了一個 ContentPresenter,它又使用了我的模板選擇器。
<ScrollViewer VerticalScrollBarVisibility="Auto" >
<ContentPresenter
ContentTemplateSelector="{StaticResource ContentSelector}"
DataContext="{Binding ElementName=MyProductFilerView, Path=HasAny}"
/>
</ScrollViewer>
選擇器被調用。 我的斷點被擊中。 但是SelectTemplate方法的item參數總是null。 因此我無法決定我應該使用哪個模板 select。
public class Selector : DataTemplateSelector
{
public DataTemplate NonTemplate { get; set; }
public DataTemplate AnyTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
switch (item)
{
default:
return base.SelectTemplate(item, container);
}
}
}
您應該使用Content
屬性,而不是綁定到或設置ContentPresenter
的DataContext
屬性:
<ContentPresenter
ContentTemplateSelector="{StaticResource ContentSelector}"
Content="{Binding ElementName=MyProductFilerView, Path=HasAny}" />
您可以像這樣將Content
直接綁定到DataContext
:
<ContentPresenter
ContentTemplateSelector="{StaticResource ContentSelector}"
DataContext="{Binding ElementName=MyProductFilerView, Path=HasAny}"
Content="{Binding} "/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.