0

モデルの詳細ページを表示したい。モデルのタイプ (文字列プロパティとして定義) に応じて、特定のコントロール (画像、テキスト、メディアなど) を表示したい

擬似コードでは、次のようになります。

<phone:PhoneApplicationPage
    x:Class="TestApp.FullscreenArtifactPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    SupportedOrientations="Portrait"  Orientation="Portrait"
    shell:SystemTray.IsVisible="False"
    xmlns:testapp="clr-namespace:TestApp"
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
>
    <!-- if(model.type == TEXT) -->
     <StackPanel>
        <TextBlock Name="MimeText" Text="{Binding Mime}"/>
    </StackPanel>

    <!-- else if(model.type == IMAGE) -->

    <StackPanel>
        <Image Name="Image" Source="{Binding PayloadUri}"/>
    </StackPanel>

</phone:PhoneApplicationPage>

ListBoxes でDataTemplateSelectorを使用できることはわかっていますが、ここに ListBox がないため、onChangeContent メソッドが呼び出されません。

助言がありますか?

ありがとう

4

1 に答える 1

0

あなたの代わりにContentControlあなたの代わりに使う必要があるのを捨てることができますXAMLControlTemplateDataTemplate

    <testapp:FullscreenTypeSelector CurrentItem="{Binding YourItem}">
        <testapp:FullscreenTypeSelector.ImageTemplate>
            <DataTemplate>
                <StackPanel>
                    <Image Name="Image" Source="{Binding PayloadUri}"/>
                </StackPanel>
            </DataTemplate>
        </testapp:FullscreenTypeSelector.ImageTemplate>
        <testapp:FullscreenTypeSelector.TextTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Name="MimeText" Text="{Binding Mime}"/>
                </StackPanel>
            </DataTemplate>
        </testapp:FullscreenTypeSelector.ImageTemplate>
    </testapp:FullscreenTypeSelector>

そして、この方法でセレクターを定義します

 public class FullscreenTypeSelector : ContentControl
    {
        public static readonly DependencyProperty CurrentItemProperty =
            DependencyProperty.Register("CurrentItem", typeof (object), typeof (FullscreenTypeSelector), new PropertyMetadata(default(object)));

        public object CurrentItem
        {
            get
            {
                return (object) GetValue(CurrentItemProperty);
            }
            set
            {
                SetValue(CurrentItemProperty, value);
            }
        }

        public bool IsNote
        {
            get;
            set;
        }

        public DataTemplate ImageTemplate
        {
            get;
            set;
        }

        public DataTemplate TextTemplate
        {
            get;
            set;
        }

        public override void OnApplyTemplate()
        {
            //your condition goes here
            if (CurrentItem != null)
            {
                ContentTemplate = TextTemplate;
            }
            else
            {
                ContentTemplate = ImageTemplate;
            }

        }
    }   
于 2013-06-17T10:15:41.267 に答える