行...
这让我感到困惑......我有办法想到这样做......但我不知道从哪里开始。
我想在代码中添加一个PivotItem,例如......
for (int i = 0; i < App.Accounts.Items.Count; i++)
{
PivotItem pvItem = new PivotItem();
pvItem.Header = App.Accounts.Items[i].Username;
pvItem.Content = "";
pivotControl.Items.Add(pvItem);
}
现在,我遇到问题的方法是设置数据透视表的内容。
我想将此代码设置为内容:
<ListBox x:Name="Accounts" Margin="0,0,-12,0">
<StackPanel Orientation="Horizontal" Margin="0,0,0,17">
<StackPanel Width="455" x:Name="accWidth">
<TextBlock Text="Personal Account" FontSize="32" Margin="0,0,0,0" TextAlignment="Center" />
<toolkit:ToggleSwitch Header="Signed On" Tag="{Binding Tag}" IsChecked="{Binding SignedOn}" Checked="ToggleSwitch_Checked" Unchecked="ToggleSwitch_Unchecked" />
<toolkit:ToggleSwitch Header="Invisible Login" Tag="{Binding Tag}" IsChecked="{Binding InvisibleLogin}" Checked="ToggleSwitch_Checked" Unchecked="ToggleSwitch_Unchecked" />
<toolkit:ToggleSwitch Header="Show as Windows Phone 7" Tag="{Binding Tag}" IsChecked="{Binding MobileLogin}" Checked="ToggleSwitch_Checked" Unchecked="ToggleSwitch_Unchecked" />
</StackPanel>
</StackPanel>
</ListBox>
我能想到做的是:以某种方式创建另一个带有上述代码的.XAML表,但是,我将如何声明:
pvItem.Content = XAMLSheet.xaml;
除非有另一种方法,否则我认为这是我必须要做的。
我还需要事件工作,标签应该使用代码而不是像我原来那样使用数据绑定。
我尝试过这样做,但是,它只显示为文本而不是代码......
pvItem.Content = "<TextBlock Text=\"Hello\" />";
谢谢。
答案 0 :(得分:1)
这是一个允许您动态分配PivotItem
内容的解决方案:使用在布局根目录中声明的内容创建UserControl:
<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480">
<Grid x:Name="LayoutRoot">
<ListBox x:Name="Accounts" Margin="0,0,-12,0">
<StackPanel Orientation="Horizontal" Margin="0,0,0,17">
<StackPanel Width="455" x:Name="accWidth">
<TextBlock Text="Personal Account" FontSize="32" Margin="0,0,0,0" TextAlignment="Center" />
<toolkit:ToggleSwitch Header="Signed On" Tag="{Binding Tag}" IsChecked="{Binding SignedOn}" Checked="ToggleSwitch_Checked" Unchecked="ToggleSwitch_Unchecked" />
<toolkit:ToggleSwitch Header="Invisible Login" Tag="{Binding Tag}" IsChecked="{Binding InvisibleLogin}" Checked="ToggleSwitch_Checked" Unchecked="ToggleSwitch_Unchecked" />
<toolkit:ToggleSwitch Header="Show as Windows Phone 7" Tag="{Binding Tag}" IsChecked="{Binding MobileLogin}" Checked="ToggleSwitch_Checked" Unchecked="ToggleSwitch_Unchecked" />
</StackPanel>
</StackPanel>
</ListBox>
</Grid>
</UserControl>
然后在您创建PivotItem
的代码中,创建用户控件的新实例,确保设置DataContext
和ItemsSource
属性以支持您的绑定:< / p>
for (int i = 0; i < App.Accounts.Items.Count; i++)
{
PivotItem pvItem = new PivotItem();
pvItem.Header = App.Accounts.Items[i].Username;
//instantiate your control and set the DataContext/ItemsSource to your model it will be bound to
MyUserControl myControl = new MyUserControl();
myControl.DataContext = someModel;
myControl.List.ItemsSource = someModel.List;
//assign content to the instance of your user control
pvItem.Content = myControl;
pivotControl.Items.Add(pvItem);
}
答案 1 :(得分:0)
如果你真的需要添加xaml片段中的代码,你可以做XamlReader.Load(),虽然我不确定你为什么需要它。 如果你想从一个集合构建一个Pivot - 为什么不绑定到它的ItemsSource并将你的xaml作为ItemTemplate?您可能需要摆脱事件处理程序,而是将IsChecked绑定更改为Mode = TwoWay。
答案 2 :(得分:0)
我想出了一些......
我想不出另一种方式:
ListBox lb = new ListBox();
lb.Margin = new Thickness(0, 0, -12, 0);
TextBlock tb = new TextBlock();
tb.Text = App.Accounts.Items[i].Description;
tb.FontSize = 32;
tb.TextAlignment = TextAlignment.Center;
tb.Width = 455;
ToggleSwitch signOn = new ToggleSwitch();
signOn.Tag = i.ToString();
signOn.Header = "Signed On";
signOn.IsChecked = App.Accounts.Items[i].SignedOn;
signOn.Checked += new EventHandler<RoutedEventArgs>(signOn_Checked);
signOn.Unchecked += new EventHandler<RoutedEventArgs>(signOn_Unchecked);
signOn.Width = 455;
ToggleSwitch invisLogin = new ToggleSwitch();
invisLogin.Tag = i.ToString();
invisLogin.Header = "Invisible Login";
invisLogin.IsChecked = App.Accounts.Items[i].InvisibileLogin;
invisLogin.Checked += new EventHandler<RoutedEventArgs>(invisLogin_Checked);
invisLogin.Unchecked += new EventHandler<RoutedEventArgs>(invisLogin_Unchecked);
invisLogin.Width = 455;
ToggleSwitch wpLogin = new ToggleSwitch();
wpLogin.Tag = i.ToString();
wpLogin.Header = "Show as Windows Phone 7";
wpLogin.IsChecked = App.Accounts.Items[i].InvisibileLogin;
wpLogin.Checked += new EventHandler<RoutedEventArgs>(wpLogin_Checked);
wpLogin.Unchecked += new EventHandler<RoutedEventArgs>(wpLogin_Unchecked);
wpLogin.Width = 455;
lb.Items.Add(tb);
lb.Items.Add(signOn);
lb.Items.Add(invisLogin);
lb.Items.Add(wpLogin);
pvItem.Content = lb;
是否有改进代码/使其不那么草率?
感谢。
答案 3 :(得分:0)
另一种方法是不使用代码,而是使用数据绑定来填充数据透视表。