Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
1005
Maximize tile from code fails
posted

Hi,

I am trying to write a Prism (CAL) adapter for the XamTilesControl, and in my implementation I would like to have only one active tile, and this tile should be the one and only maximized tile. So, maximizing a tile should make it's view active (easily handled by hooking into the TileStateChanged event), and when the view is made active programmatically then the tile should be maximized, and that's where I run into problems.

When a new view is added to the prism region, I add it to the tile control, then I attempt to get the tile by calling TileFromItem(), but this returns null. :(  After reading some other posts I tried calling UpdateLayout() first, but that didn't help, but after a little more reading I found another suggestion to use Dispatcher.BeginInvoke().  In the end I had to use the following code (_instance is my XamTilesControl):

                    _instance.Dispatcher.BeginInvoke((Action)(() =>
                    {
                        _instance.UpdateLayout();
                        Tile tile = _instance.TileFromItem(e.NewItems[0]);
                        if (tile != null)
                        {
                            tile.State = TileState.Maximized;
                        }
                    }));

This did allow me to access the Tile for the view, and to set it's state to Maximized, but unfortunately it doesn't actually maximize the view!  Instead the view appears to be still in normal mode, but it does have a minimize button (as opposed to a maximize button when I don't set the tile state to Maximized), which implies that the tile thinks it's maximized!  If I click the button it changes to a Maximize button and the tile remains the same, when I click it again it maximizes.

So I have two problems, first I would like to know the proper way to obtain the Tile after adding an item to the Items collection, and second I would like know how to maximize the tile programmatically.  If anyone has any ideas I would be very grateful.

Thanks.

Brian

 

Parents
  • 12875
    posted

    Hi Brian,

     

    I am aware of an issue that was resolved in earlier service releases concerning a newly added tile not being visible without using threading.   It was an older issue prior to the release of 2011.1.  Please let me know what product and service release you are using.

     

    Secondly you mentioned that you want to only have one maximized tile at a time.  The xamTilesControl  MaximizedModeSettings  has a property, MinimizedTilesExpansionMode, which you can set to AllowOne to allow only one maximized tile at a time.   

     

    It appears that you are using the appropriate method to acquire the tile that you want to maximize by using Tile tile =  tilesControl.TileFromItem(item).  And setting the tile’s State to TileState.Maximized should cause that tile to be maximized and, in conjunction with the previous setting I mentioned, cause it to be the only maximized tile.

     

    I’m a little confused if your code is in the TileStateChanged event or some other event.  The TileStateChanged event should provide you with the affected tile directly from the arguments.

     

    It might be helpful if you could provide me with a small sample.

Reply Children