c# - Custom DataGrid WinRT Rendered Size 0 -
i'm trying build datagrid in winrt. when start this, datagrid has it's full size. when check winrtxamltoolkit.debugging tool, see _itemspanel has rendered size 0. think easiest way find problem when paste whole code in here^^
<local:datagrid itemssource="{binding material}"> <local:datagrid.itemtemplate> <datatemplate> <grid background="white"> <textblock text="{binding name}" margin="5" /> </grid> </datatemplate> </local:datagrid.itemtemplate> </local:datagrid> here datagrid class:
public class datagrid : panel { private stackpanel _itemspanel; public datatemplate itemtemplate { get; set; } public static readonly dependencyproperty itemssourceproperty = dependencyproperty.register("itemssource", typeof(ienumerable<object>), typeof(datagrid), new propertymetadata(0, itemssourcechangedcallback)); private static void itemssourcechangedcallback(dependencyobject d, dependencypropertychangedeventargs args) { if (args.newvalue == null) return; if (args.newvalue == args.oldvalue) return; datagrid datagrid = d datagrid; if (datagrid == null) return; var obslist = args.newvalue inotifycollectionchanged; if (obslist != null) { datagrid.render(); } } public ienumerable<object> itemssource { { return (ienumerable<object>)getvalue(itemssourceproperty); } set { setvalue(itemssourceproperty, value); } } public datagrid() { _itemspanel = new stackpanel(); _itemspanel.height = 800; _itemspanel.width = 400; _itemspanel.margin = new thickness(10, 10, 10, 10); _itemspanel.background = new solidcolorbrush(colors.white); children.add(_itemspanel); } public void render() { _itemspanel.children.clear(); foreach (object item in itemssource) { frameworkelement element = itemtemplate.loadcontent() frameworkelement; if (element == null) return; element.datacontext = item; _itemspanel.children.add(element); } } protected override size arrangeoverride(size finalsize) { return base.arrangeoverride(finalsize); } protected override size measureoverride(size availablesize) { this.clip = new rectanglegeometry { rect = new rect(0, 0, availablesize.width, availablesize.height) }; foreach (frameworkelement container in children) { container.measure(new size(double.positiveinfinity, double.positiveinfinity)); } return availablesize; } } hope can me :)
Comments
Post a Comment