2016-04-29 13 views
0

私はWindows Phone 8.1アプリケーションで作業しています。アイテムの状態によって2つの異なるアイテムテンプレートを表示する必要があります。複数のItemTemplateを使用している場合、ListViewアイテムがすべて伸びていない

私のテンプレートを切り替えるには、TemplateSelector抽象クラスをいくつかのブログなどで提案しています。

public class LibraryItemTemplateSelector : TemplateSelector 
{ 
    public DataTemplate Expanded 
    { 
     get; 
     set; 
    } 

    public DataTemplate Collapsed 
    { 
     get; 
     set; 
    } 

    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var v = ApplicationData.Current.LocalSettings.Values; 
     var ffs = item as FFStory; 
     if (ffs != null) 
     { 
      if (v.ContainsKey("alwaysExpanded")) 
      { 
       if ((bool)v["alwaysExpanded"] == true) 
        return Expanded; 
      } 
      var result = ... 
      ... 
      if (result == 1) 
       return Collapsed; 
      else return Expanded; 
     } 
     return null; 
    } 
} 

次に、私はアイテムにテンプレートを割り当てるようにXAMLで<ItemTemplate><DataTewmplate>タグ内のクラス名を使用する:私は継承したクラスを作成した後

public abstract class TemplateSelector : ContentControl 
{ 
    public abstract DataTemplate SelectTemplate(object item, DependencyObject container); 

    protected override void OnContentChanged(object oldContent, object newContent) 
    { 
     base.OnContentChanged(oldContent, newContent); 

     ContentTemplate = SelectTemplate(newContent, (DependencyObject)this); 
    } 
} 

:ここでは、コードです

<local:LibraryItemTemplateSelector Content="{Binding}" Expanded="{StaticResource expandedItem}" Collapsed="{StaticResource collapsedItem}" HorizontalAlignment="Stretch" /> 

問題:

アプリを起動すると、すべてのアイテムの幅がランダムに見えます。

展開された項目はすべて全角ですが、それは理解できます。 WrapText=WrapWholeWordsが設定されている説明テキストブロックは、ボックスを引き伸ばすだけです。

折りたたまれたアイテムは、どのルールでも機能していないようです。多くのアイテムの幅はタイトルTextBlockと同じですが、一部は〜30px長くなっています。場合によっては、全幅アイテムが正しく機能していることもありますが、それはランダムなようです。

私はまたLibraryItemTemplateSelectorクラスなしでこれらのテンプレートを別々に使ってみましたが、うまくいきました。

Conslusions:

私はそれなしですべてが正常に動作しますが、私は正確に何が間違って言うことができないので、TemplateSelector抽象クラスと間違って何かがあると思います。

ItemContainerStyleHorizontalContentAlignmentを伸ばしに設定しました。可能な限り、可能な限り、HorizontalAlignment="Stretch"属性も追加しました。言うまでもなく、それはうまくいかなかった。

私はここで間違っていますか?上の抽象クラスに何か問題がありますか、あるいはItemTemplateがこのように動作するはずはありませんか?

ありがとうございました!

答えて

0

DataTemplateSelectorためにこのコードを試してみてください。

public class ProfilePageTemplateSelector : DataTemplateSelector 
    { 
     public DataTemplate dtPostTemplate { get; set; } 
     public DataTemplate dtCommentTemplate { get; set; } 

     protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
     { 
      var uiElement = container as UIElement; 
      if (uiElement == null) 
      { 
       return base.SelectTemplate(item, container); 
      } 

      if (item is Post) 
      { 
       return dtPostTemplate; 
      } 
      else if (item is Comment) 
      { 
       return dtCommentTemplate; 
      } 
      return base.SelectTemplateCore(item, container); 
     } 
関連する問題