簡體   English   中英

克隆網格Windows Phone 8

[英]Clone Grid Windows Phone 8

我在XAML代碼中有一個Grid模板:

<Grid x:name="gridTemplate>
Childrens...
</Grid>

現在我想將此網格放在foreach循環的LongListSelector中:

foreach(var item in myList)
{
   clonedGrid= ??? (need clone here my xaml control)
   longlistselector.Items.Add(clonedGrid):
}

這對我來說對WPF有效:

 public static class ExtensionMethods
{
    public static T XamlClone<T>(this T original)
        where T : class
    {
        if (original == null)
            return null;

        object clone;
        using (var stream = new MemoryStream())
        {
            XamlWriter.Save(original, stream);
            stream.Seek(0, SeekOrigin.Begin);
            clone = XamlReader.Load(stream);
        }

        if (clone is T)
            return (T)clone;
        else
            return null;
    }
}

如何在WINDOWS PHONE 8中實現呢?

我將創建一個contentControl,在其中可以將像這樣的資源中的dataTemplate放進去:

a

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="MyGrid">
        <Grid>
            <!-- here is your data template, where you can bind to item's properties -->
        </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

cs

foreach (var item in myList)
{
     ContentControl control = new ContentControl();
     control.Content = item;
     control.ContentTemplate = Resources["MyGrid"] as DataTemplate;
     longlistselector.Items.Add(control);
}

如果您的Grid沒有設置太多屬性,則只需創建創建新Grid並將其作為參數傳遞給舊Grid的create方法,以便可以將所有屬性設置為相同。

public Grid CloneGrid(Grid input)
{
Grid temp = new Grid();
temp.Width = input.Widht;
... etc

return temp;
}

編輯:另一種方法是在App.xaml中將您的屬性定義為Style ,然后將其應用於Grid

Grid.Style = App.Current.Resources[StyleKey] as Style;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM