私は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
抽象クラスと間違って何かがあると思います。
ItemContainerStyle
にHorizontalContentAlignment
を伸ばしに設定しました。可能な限り、可能な限り、HorizontalAlignment="Stretch"
属性も追加しました。言うまでもなく、それはうまくいかなかった。
私はここで間違っていますか?上の抽象クラスに何か問題がありますか、あるいはItemTemplateがこのように動作するはずはありませんか?
ありがとうございました!