簡體   English   中英

WPF 模板。 模板選擇器沒有收到項目

[英]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);
            }

        }
    }
  • 你能解釋一下為什么在我的例子中項目總是 null 嗎?
  • 也許描述需要做什么才能用一個值填充項目?

您應該使用Content屬性,而不是綁定到或設置ContentPresenterDataContext屬性:

 <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM