0

XAMLでは、コードを使用してデータテンプレートを作成できるため、コントロールを好みに合わせてスタイル設定およびバインドできます。

    <ListBox x:Name="statusBox">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid x:Name="ListBoxItemLayout" >
                    <StackPanel>
                        <TextBlock x:Name="time" Style="{StaticResource PhoneTextNormalStyle}" Margin="0" Width="462" Text="{Binding time}" FontSize="16" FontWeight="Bold"/>
                        <TextBlock x:Name="status"  Style="{StaticResource PhoneTextNormalStyle}" Margin="0" Width="462" Text="{Binding status}" TextWrapping = "Wrap" Height="85" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

 public class status
    {
        public string time{ get; set; }
        public string statusText{ get; set; }
    }


        List<status> list = new List<status>();

        status aStatus = new status() { time="3:00pm", statusText="this is a status" };
        list.Add(aStatus);

        statusBox.ItemsSource = list;

ただし、最新のプロジェクトでは、アイテム/ページが動的に追加されるピボットコントロールがあるため、ページにxamlを定義できません。これに対する回避策はありますか?

私ができるようにしたいのは、c#コードのみを使用してデータテンプレートを作成することです。これにより、アプリケーションで新しいコントロールをインスタンス化できます。

                List<status> list = new List<status>();
                statusBox lb = new statusBox(); // <-------------------- look here

                status aStatus = new status() { time="3:00pm", statusText="this is a status" };
                list.Add(aStatus);
                list.Add(aStatus);

                lb.ItemsSource = list;

                PivotItem pi = new PivotItem();
                pi.Content = lb;
                Pivot pivot = pivot1;
                pivot.Items.Add(pi);

この方法でカスタムコントロールを作成することは可能ですか?もしそうなら、どのように?

4

1 に答える 1

1

まず、電話リソースセクションに1つのDataTemplateを作成します

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Name="listBoxTemplate">
        <Grid >
            <StackPanel>
                <TextBlock Style="{StaticResource PhoneTextNormalStyle}" Margin="0" Width="462" Text="{Binding time}" FontSize="16" FontWeight="Bold"/>
                <TextBlock Style="{StaticResource PhoneTextNormalStyle}" Margin="0" Width="462" Text="{Binding statusText}" TextWrapping = "Wrap" Height="85" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            </StackPanel>
        </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

次に、コードビハインドファイルで次のコードを使用して、リストボックスを動的に生成します

ListBox lb = new ListBox() { Name = "statusBox" };
lb.ItemTemplate = this.listBoxTemplate;

List<status> list = new List<status>();
status aStatus = new status() { time = "3:00pm", statusText = "this is a status" };
list.Add(aStatus);
list.Add(new status() { time = "4:00pm", statusText = "this is another status" });

lb.ItemsSource = list;
this.ContentPanel.Children.Add(lb);
于 2012-07-12T08:02:44.730 に答える