[英]Creating a databound control through c# code?
我知道在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);
是否可以通過這種方式創建自定義控件? 如果是這樣,怎么辦?
首先,在電話資源部分中創建一個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
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.