2014-01-19 45 views
0

我正在编写一个应用程序,在其中创建了我自己的一些控件。根据用户的意愿动态添加其中一个控件。在IsolatedStorage列表中保存控件(UIElements)

此控件包含4个文本框,每个文本框在用户输入时都会从用户那里获取数据。但是我无法工作的事情是如何拯救他们。我试图将列表保存为普通列表 - 这不起作用。见我的代码:

声明:

List<scheduleControl> scheduleList; 
IsolatedStorageSettings settings; 

的设置初始化:

settings = IsolatedStorageSettings.ApplicationSettings; 

动态地将控件添加到列表:

 private void addscheduleitemButton_Click(object sender, RoutedEventArgs e) 
    { 
     // addscheduleitemButton was tapped, add an item to the list holding the information the user entered 

     scheduleControl control = new scheduleControl(); 
     control.fromTextBlock.Text = "From: " + fromTextBox.Text.ToString(); 
     control.toTextBlock.Text = "To: " + toTextBox.Text.ToString(); 
     control.detailsTextBlock.Text = "Details: " + detailsTextBox.Text.ToString(); 
     control.dateTextBlock.Text = "Date: " + dateTextBox.Text.ToString(); 

     // Create Thickness 
     Thickness stackpanelThickness = new Thickness(); 
     stackpanelThickness.Bottom = 20; 
     stackpanelThickness.Top = 0; 
     stackpanelThickness.Right = 0; 
     stackpanelThickness.Left = 0; 

     // Assign the thickness 
     control.Margin = stackpanelThickness; 

     // Add the control 
     scheduleListBox.Items.Add(control); 
     scheduleList.Add(control); 
    } 

控制XAML:

<UserControl x:Class="App_Name.scheduleControl" 
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}" Height="132" Width="359"> 

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}"> 
    <TextBlock x:Name="dateTextBlock" HorizontalAlignment="Left" Margin="10,0,0,0" TextWrapping="Wrap" Text="Date" VerticalAlignment="Top" FontSize="22" Height="32" Width="152"/> 
    <TextBlock x:Name="fromTextBlock" HorizontalAlignment="Left" Margin="10,47,0,0" TextWrapping="Wrap" Text="From:" VerticalAlignment="Top" FontSize="22" Height="28" Width="152"/> 
    <TextBlock x:Name="toTextBlock" HorizontalAlignment="Left" Margin="10,93,0,0" TextWrapping="Wrap" Text="To:" VerticalAlignment="Top" FontSize="22" Width="152"/> 
    <TextBlock x:Name="detailsTextBlock" Margin="167,0,0,0" TextWrapping="Wrap" Text="Details:" FontSize="22" HorizontalAlignment="Left" Width="192"/> 

</Grid> 
</UserControl> 

完成后保存列表:

   // Save the scheduleList 
      settings.Add(projectnameTextBox.Text.ToString() + "-scheduleList", scheduleList); 
settings.Save(); 

我得到一个InvalidDataControlException,这是认为这是由于这一点,因为日志说正在连载一些有关的UIElement。

请帮帮忙!:)

回答

0

你的控制,而不是控制保存的内容。

IsolatedStorageSettings.ApplicationSettings可以保存自己的对象的列表,但它需要在您身边的附加代码。这是一个good example

+0

嗯,好的 - 这会增加一点点工作 - 对此最好的方法是什么? – Erik

+0

将控件存储在类中,并将它们(类)序列化为文件。您可以使用[XMLserializer](http://msdn.microsoft.com/zh-cn/library/system.xml.serialization.xmlserializer(v = vs.110).aspx)执行此任务。如果要将列表保存到IsolatedStorage中,您可以[尝试此代码](http://stackoverflow.com/questions/5073925/problem-storing-a-list-of-objects-in-isolated-storage)。我编辑了原始答案,因为isolatedstorage.settings可以保存对象列表,但不能直接。 – crea7or