none
Layout cycle detected. Layout could not complete.

    Question

  • I ran into this initially when I was trying to put 200 to 350 (never more than 350) usercontrols, which contains a textbox, into a stackpanel.  I ripped everything out (even the user control and stack panel), and was able to narrow it down to a problem with texboxes.

    Extremely simple test case:

     

    <UserControl x:Class="TestSilverlight.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300">
        <Canvas x:Name="LayoutRoot" Background="White">
        </Canvas>
    </UserControl>
     
      
    Public Class Page : Inherits UserControl
    
        Public Sub New()
            InitializeComponent()
    
            For i = 0 To 350
                LayoutRoot.Children.Add(New TextBox())
            Next
        End Sub
    
    End Class
     
      
    Friday, October 17, 2008 11:19 AM

Answers

  • Thanks for reporting this. There is a known issue with TextBox--you can't have more than ~250 on a page.

    Sunday, October 19, 2008 4:43 PM
  • This is fixed in the SL3 beta. Your workaround (switching between TextBlock and TextBox) is the way to go for now.

    Monday, April 06, 2009 2:15 PM

All replies

  • Thanks for reporting this. There is a known issue with TextBox--you can't have more than ~250 on a page.

    Sunday, October 19, 2008 4:43 PM
  • Dan:

    Is there going to be a fix for this anytime soon? Also, what would happen if you had textboxes that are in an edit template? Is there still a limitation like this? That is, since not all of them would be visible unless the row or cell were in editing mode, would the problem still be there?

    Tuesday, October 28, 2008 1:31 PM
  • I don't know for certain when this will be addressed.

    The only time that this should matter is if the TextBoxen are all visible and getting measured at the same time.

    Dave

    Tuesday, October 28, 2008 4:22 PM
  • So if I have a tab control where each tab has a datagrid, the number of textboxes on the hidden tabs aren't part of the issue?

    Tuesday, October 28, 2008 4:27 PM
  • Am I to understand that any TextBoxes that are not in sight b/c of scrolling do not count in the 250 limit?

    Tuesday, October 28, 2008 5:54 PM
  • Am I to understand that any TextBoxes that are not in sight b/c of scrolling do not count in the 250 limit?

    If they are measured, they count. If they are in a ScrollViewer, they still get measured.

    Tuesday, October 28, 2008 6:50 PM
  • So if I have a tab control where each tab has a datagrid, the number of textboxes on the hidden tabs aren't part of the issue?

    As long as they are actually collapsed and not just covered up, that should be OK.

    Tuesday, October 28, 2008 6:51 PM
  • First of all, I want to thank you Dave for your time.  I really appreciate it.

    The reason I asked the question is this:

    I have a DataGrid that has 8 TemplateColumns whose content is a TextBox.  When it initially loads, I get the "layout cycle detected" exception.  If I comment out any 2 TemplateColumns, the exception does not occur.  Now, the DataGrid has 155 rows.  That works out to well over 900 TextBoxes at 6 per row which blows that 250 limit out of the water.  So, my thought was, perhaps, that only 40 rows were visible, due to scrolling, therefore only 240 TextBoxes were being measured at 6 per row.  But, at 7 per row, 280 are being measured which exceeds the 250 limit.

    So, does the framework measure the rows that are invisible due to scrolling, but does not measure the content of those rows?  Or is there another explaination?

    Also, until the bug is fixed, would having CellTemplates render text and CellEditingTemplates render TextBoxes be a solution for me?

    Wednesday, October 29, 2008 9:42 AM
  • DataGrid virtualizes its rows, so it doesn't make UI for rows that aren't visible. There may be exceptions for scrolling optimization, etc., but the bottom line is that you are probably right about the visible rows.

    I'll have to defer to others about your cell templates question. I'll see if I can get someone to answer that for you.

    Wednesday, October 29, 2008 1:26 PM
  • Yes, you can use a TextBlock in the CellTemplate and a TextBox in the CellEditingTemplate.  However, if you're just displaying text like that, then you may as well use the DataGridTextColumn since that's its purpose, and it manages this aspect for you.  You shouldn't get any Layout cycle errors with the DataGridTextColumn

    Dave is correct about the DataGrid virtualization.  The DataGrid will only create elements that fill up its display size.  As you scroll, it will reuse elements that were scrolled off so there is minimal creation while scrolling as well

    Thursday, October 30, 2008 3:40 PM
  • Any word on when the problem will be fixed?

    Monday, November 03, 2008 5:52 PM
  • Any word on when the problem will be fixed?

    Nothing concrete at this time, sorry. I want to fix it as soon as possible, but you should definitely try to work around it. It won't be any time real soon.

    Tuesday, November 04, 2008 12:07 PM
  • Any word on when the problem will be fixed?

    Nothing concrete at this time, sorry. I want to fix it as soon as possible, but you should definitely try to work around it. It won't be any time real soon.

    I should clarify that it is a high-priority bug, and I would anticipate fixing it for the next version.

    Thursday, November 06, 2008 3:04 PM
  • Thanks Dave. Do you mean for 3.0? Or, is there going to be an SP1 for 2.0?

     

    Thursday, November 06, 2008 3:13 PM
  • Thanks Dave. Do you mean for 3.0? Or, is there going to be an SP1 for 2.0?

    Well, the release plan and dates for the next three releases look like thasduh fasd,jkln czlknjm, zasdcklnmj ,

    Sorry, I just got some sort of shock through my mouse and keyboard. :)

    Plans are tentative, and not public at this point. However, here are some more details that may help you:

    Layout uses while loops, and the loops need some sort of upper bound on them so that they don’t loop forever in pathological conditions. An example of a pathological condition is if foo’s size is changed in the foo.SizeChanged event handler. There are a number of ways that a layout loop counter can be “used up” legitimately, such as doing anything to invalidate measure during an arrange call, invalidating measure or arrange during a SizeChanged or LayoutUpdated handler (even if a pathological condition is avoided), etc. The TextBox control is doing something to “use up” a layout loop iteration. Since the layout cycle detection is triggered at 250 iterations, under ideal circumstances, you can measure/arrange at most ~250 TextBoxes at once. It has nothing to do with frame rate, the hardware, the browser, etc. It also doesn’t matter how many TextBoxes you have in total, just how many you are laying out in one frame. This is most critical at startup time, when if you have > 250 visible TextBoxes in the tree, you will get a layout cycle. You will also have problems any other time you add > 250 visible TextBoxes, or if you have somehow incrementally added TextBoxes in groups so that you have gotten away with having more than 250, but all TextBoxes layout has been invalidated at once, such as by resizing the browser. You can have as many collapsed TextBoxes on the screen as you want—layout just skips over collapsed controls. Also, if you add the TextBoxes incrementally, and somehow manage them so that they won’t all get invalidated at once (e.g. by putting them in parent containers that won’t ever be resized) you should be OK.

     

    Thursday, November 06, 2008 3:51 PM
  • Could you describe your scenario for why you need >250 TextBoxes displayed at one time?  Thanks

    Thursday, November 06, 2008 3:56 PM
  •  my particular scenario is that a textbox is contained in a usercontrol, and a number of these user controls are added to a stack panel according some some data retreived from a database.  typically there will only be ~10 entries (and thus 10 textboxes).  but there are occasionally circumstances that cause several hundred entries (and thus requires several hundred usercontrols).

    Thursday, November 06, 2008 4:02 PM
  • In my case, I am creating a UserControl that allows editing of schedule data. I need to be able to create a TextBox for each 30 minute slot for a week. So, I need 48 TextBoxes per day times 7 days a week, plus some TextBlocks for column and row headers. I know this is probably a pretty lame UI, but, that is the way it works in the current HTML based app and when I tried coming up with a different UI, users complained about it and wanted me to change it back. Right now I just want to implement something similar to what I have in the HTML app. Later I plan on going back and seeing what improvements I can make to it UI-wise with the more robust functionality in Silverlight.

    What I'm wondering is why the problem only seems to occur with TextBoxes? It seems strange that the problems doesn't seem to happen if you use some other control such as a ComboBox or a ListBox or something.

    Thursday, November 06, 2008 4:16 PM
  • What if instead of textboxes, you displayed the data unless they clicked on it. That is, you would use a textblock to display the data unless they were editing it. Would that scenario prevent the problem since only one textbox at a time would be displayed?

    Thursday, November 06, 2008 4:22 PM
  •  thats what my current solution is.  the problem is that users were previously able to tab from beginning to end in the old UI.  having to click on the next one is just a slight inconvenience, but acceptable for now.

    Thursday, November 06, 2008 4:26 PM
  • I've been thinking about maybe doing it that way. I've also been wondering if I can use a DataGrid to do it. The problem with DataGrid is that I don't know if I can set row headers. It has a row header that you can turn on, but, I don't think you can put different text in it for each row. Basically, I just wanted to do something simple without having to be an expert in developing controls.

    Thursday, November 06, 2008 4:29 PM
  • ccombs should be able to use a DataGrid.  Depending on what your UserControl looks like, you might be able to sytle the DataGridRow to get it the way you want.  Or, you could just plop the entire user control in a Template column and have a 1 column DataGrid.  As long as you don't have over 250 TextBoxes visible at the same time, you'll be good.  Be sure to set a Height on the DataGrid though, if there's no Height set either through the container or by the user, then the DataGrid will grow infinitely to display all it's rows.  Alternatively, you could take advantages of the DataGrid's editing so you'll only show TextBlocks by default, but they'll switch to a TextBox in the cell that you're editing.  This way, you'll have just 1 TextBox at a time.

     For jemiller, you could accomplish this scenario in the DataGrid using several text columns.  However, I could see that your users might get a bit annoyed at having to double click a cell or press F2 to go into editing mode.  Once they're in editing mode, they can press tab to move to the next cell so it might not be so bad.  You could give the editing a try on a small DataGrid to get an ideal of how it would feel.

    Thursday, November 06, 2008 4:31 PM
  • Sure you can put different items in there. If what you want for a row header is part of your data, you can put it in the first column and lock that column down. Then if they scroll horizontally, the first column will stay on the page.

    Thursday, November 06, 2008 4:35 PM
  • The DataGrid has a RowHeaderStyle property that you can use to customize the RowHeader to anything you want using by changing the ContentTemplate or ControlTemplate.  In your templates, you can Binding to properties of your item

    Thursday, November 06, 2008 4:37 PM
  • Ideally what I want to do is make it so that I have column headings that list the week day and the date and row headings that list the time of day. I want the column and row headings to be styled the same way.

    Thursday, November 06, 2008 4:38 PM
  • Yifung, thanks for the info on the style template. I'll take a look at that.

    Thursday, November 06, 2008 4:41 PM
  • Try this for the schedule:

    <UserControl x:Class="SilverlightApplication57.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
        xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            
            <data:DataGrid x:Name="dataGrid" AutoGenerateColumns="False" HeadersVisibility="All">
                
                <data:DataGrid.RowHeaderStyle>
                    <Style TargetType="dataprimitives:DataGridRowHeader">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="Auto" />
                                        </Grid.ColumnDefinitions>
                                        
                                        <Border BorderBrush="#FFC9CACA" Background="#FF1F3B53" Grid.RowSpan="2">
                                            <Rectangle Stretch="Fill">
                                                <Rectangle.Fill>
                                                    <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1">
                                                        <GradientStop Color="#FFFFFFFF" Offset="0.015" />
                                                        <GradientStop Color="#F9FFFFFF" Offset="0.375" />
                                                        <GradientStop Color="#E5FFFFFF" Offset="0.6" />
                                                        <GradientStop Color="#C6FFFFFF" Offset="1" />
                                                    </LinearGradientBrush>
                                                </Rectangle.Fill>
                                            </Rectangle>
                                        </Border>
                                    
                                        <TextBlock VerticalAlignment="Center" Text="{Binding Hour}" Margin="1,2,5,2" />
                                        <Rectangle Grid.Column="1" Width="1" VerticalAlignment="Stretch" Fill="#FFC9CACA" />
    
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </data:DataGrid.RowHeaderStyle>
               
                <data:DataGrid.Columns>
                    <data:DataGridTextColumn Header="Mon" Binding="{Binding Mon}" />
                    <data:DataGridTextColumn Header="Tues" Binding="{Binding Tues}" />
                    <data:DataGridTextColumn Header="Wed" Binding="{Binding Wed}" />
                    <data:DataGridTextColumn Header="Thurs" Binding="{Binding Thurs}" />
                    <data:DataGridTextColumn Header="Fri" Binding="{Binding Fri}" />
                </data:DataGrid.Columns>
            </data:DataGrid>
            <Button Grid.Row="1" Content="Does nothing" Width="50"/>
        </Grid>
    </UserControl>
      
    using System.Collections.ObjectModel;
    using System.Windows.Controls;
    
    namespace SilverlightApplication57
    {
        public partial class Page : UserControl
        {
            private ObservableCollection _timeSlots;
    
            public Page()
            {
                InitializeComponent();
    
                _timeSlots = new ObservableCollection()
                {
                    new TimeSlot { Hour=" 9:00AM", Mon="18.02", Tues="8.01", Wed="5.01", Thurs="6.01", Fri="Free" },
                    new TimeSlot { Hour="10:00AM"},
                    new TimeSlot { Hour="11:00AM", Mon="1.00" },
                    new TimeSlot { Hour="12:00AM", Mon="18.02", Tues="8.01", Wed="5.01", Thurs="6.001" },
                    new TimeSlot { Hour="01:00PM", Mon="9.02", Tues="8.01", Wed="5.01", Thurs="6.001" },
                    new TimeSlot { Hour="02:00PM", Mon="15.01", Tues="8.01", Wed="5.01", Thurs="6.001" },
                    new TimeSlot { Hour="03:00PM", Mon="14.01", Tues="8.01", Wed="5.01", Thurs="6.001" },
                    new TimeSlot { Hour="04:00PM", Mon="2.001", Tues="8.01", Wed="5.01", Thurs="6.001" },
                };
    
                dataGrid.ItemsSource = _timeSlots;
            }
        }
    
        public class TimeSlot
        {
            public string Mon { get; set; }
            public string Tues { get; set; }
            public string Wed { get; set; }
            public string Thurs { get; set; }
            public string Fri { get; set; }
            public string Hour { get; set; }
        }
    }
    
     
     
    Thursday, November 06, 2008 6:00 PM
  • Yifung, Thanks! That's pretty much exactly what I wanted to do. You even made the way the row headers look match the column headers. That's awesome. Thanks.

     

    Thursday, November 06, 2008 6:40 PM
  • Cool, the framework and the controls are heavily stylable.  You could completely change the look of both those row and column headers as well.

    I put the extra Button at the bottom of the page because there's a bug where the Tab key takes you straight to the browser's address bar if there aren't any other focusable elements on the page.  That destroys the editing experience when you edit a cell and press Tab to go to the next cell.  Hopefully you'll have at least one focusable element other than the DataGrid in your scenario.  I guess if you don't, you could put an invisible button on the page as a workaround.

    Thursday, November 06, 2008 6:54 PM
  • The issue has to do with the ScrollViewer in the TextBox template. If all you need are single-line TextBoxes, you can replace the ScrollViewer in the template with this:

    <Border x:Name="ContentElement" Padding="{TemplateBinding Padding}" BorderThickness="0" />

    and you will not get layout cycles caused by too many TextBoxes.

    Monday, November 10, 2008 4:15 PM
  •  5 months later and there is still an absurdly low limit on textboxes.

     

    I have a situation similar to the above issues. A complex user control with multiple text boxes that gets repeated on the screen depending on the underlying data. 

     

    Not only that, but I'm no where close to the 250 mark. The issue occurs every time I hit 98 text boxes (although it will work if at 90).

    At this point, I'm looking at spoofing the text box in a custom control. Have a rectangle and text block that mimics the textbox, and collapse the text box until the control catches focus or gets hit with a mouse down.

    It seems ludicrous that at this point in time in SL's development, when I'm pushing hard as a developer to get my coworkers and management to adopt it that I have to make caviots of the like that haven't been seen since we were Delphi developers. I can see my self pitching this at the director of IT, "Yeah, it's a great new product, we can develop faster, we can have more robust user interfaces, and oh yeah, we can never have more than 100 text boxes on any given page."

    I'm sure that pitch would get round filed in short order.

    -Rick

    Monday, April 06, 2009 2:08 PM
  • Have you tried it with sl3 beta?

    Monday, April 06, 2009 2:15 PM
  • This is fixed in the SL3 beta. Your workaround (switching between TextBlock and TextBox) is the way to go for now.

    Monday, April 06, 2009 2:15 PM
  • So here's what I came up with as a working solution:

    XAML

    <UserControl x:Class="CustomTextBox.TextBox1H"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="100" Height="22" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
    <UserControl.Resources>
    <LinearGradientBrush x:Key="TextBoxBrush" EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FFA3AEB9"/>
    <GradientStop Color="#FF8399A9" Offset="0.375"/>
    <GradientStop Color="#FF718597" Offset="0.375"/>
    <GradientStop Color="#FF617584" Offset="1"/>
    </LinearGradientBrush>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White">

    <TextBox Margin="0,0,0,0" BorderBrush="{StaticResource TextBoxBrush}" Text="TextBox" TextWrapping="Wrap" Visibility="Collapsed" x:Name="txtText"/>
    <Rectangle Height="Auto" Margin="0,0,0,0" VerticalAlignment="Stretch" Fill="#FFFFFFFF" Stroke="{StaticResource TextBoxBrush}" RadiusX="1" RadiusY="1" x:Name="recBG"/>
    <TextBlock Height="Auto" Margin="4,4,0,0" VerticalAlignment="Stretch" Text="TextBox" TextWrapping="Wrap" x:Name="lblText"/>
    <Rectangle Height="Auto" Margin="1,1,1,1" VerticalAlignment="Stretch" Stroke="#FF99C1E2" RadiusX="0" RadiusY="0" x:Name="recMouseOver" Visibility="Collapsed"/>

    </Grid>
    </UserControl>
     

      

    Code behind:

     
    Partial Public Class TextBox1H
        Inherits UserControl
    
        Public Event TextChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs)
        Public Shadows Event KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs)
    
        Public Sub New()
            InitializeComponent()
            Me.IsTabStop = True
            Me.Cursor = Cursors.IBeam
        End Sub
    
        Private Shadows ReadOnly Property isEnabled() As Boolean
            Get
                Return Me.txtText.Visibility = Windows.Visibility.Visible
            End Get
        End Property
    
        Private Sub enable()
            Me.recMouseOver.Visibility = Windows.Visibility.Collapsed
            Me.txtText.Text = Me.lblText.Text
            Me.txtText.Visibility = Windows.Visibility.Visible
            Me.recBG.Visibility = Windows.Visibility.Collapsed
            Me.lblText.Visibility = Windows.Visibility.Collapsed
        End Sub
    
        Private Sub disable()
            Me.lblText.Text = Me.txtText.Text
            Me.txtText.Visibility = Windows.Visibility.Collapsed
            Me.recBG.Visibility = Windows.Visibility.Visible
            Me.lblText.Visibility = Windows.Visibility.Visible
        End Sub
    
    #Region "Textbox event handling and bubble ups"
        Private Sub txtText_GotFocus(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles txtText.GotFocus
    
        End Sub
    
        Private Sub txtText_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles txtText.KeyDown
            RaiseEvent KeyDown(Me, e)
        End Sub
    
        Private Sub txtText_LostFocus(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles txtText.LostFocus
            disable()
        End Sub
    
        Private Sub txtText_TextChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles txtText.TextChanged
            RaiseEvent TextChanged(Me, e)
        End Sub
    #End Region
    
        Private Sub TextBox1h_GotFocus(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.GotFocus
            If Not isEnabled Then
                Me.txtText.SelectAll()
                enable()
                Me.txtText.Focus()
            End If
        End Sub
    
        Private Sub TextBox1h_MouseEnter(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Me.MouseEnter
            Me.recMouseOver.Visibility = Windows.Visibility.Visible
        End Sub
    
        Private Sub TextBox1h_MouseLeave(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Me.MouseLeave
            Me.recMouseOver.Visibility = Windows.Visibility.Collapsed
        End Sub
    
        Private Sub TextBox1h_MouseLeftButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Me.MouseLeftButtonUp
            If Not isEnabled Then
                Me.txtText.SelectAll()
                enable()
                Me.txtText.Focus()
            End If
        End Sub
    
    #Region "Public Properties"
        Public Property Text() As String
            Get
                Return Me.txtText.Text
            End Get
            Set(ByVal value As String)
                Me.txtText.Text = value
                Me.lblText.Text = value
            End Set
        End Property
    
        Public Property Fill() As Brush
            Get
                Return Me.recBG.Fill
            End Get
            Set(ByVal value As Brush)
                Me.recBG.Fill = value
                Me.txtText.Background = value
            End Set
        End Property
    
        Public Property Stroke() As Brush
            Get
                Return Me.recBG.Stroke
            End Get
            Set(ByVal value As Brush)
                Me.recBG.Stroke = value
                Me.txtText.BorderBrush = value
            End Set
        End Property
    
        Public Property TextWrapping() As TextWrapping
            Get
                Return Me.txtText.TextWrapping
            End Get
            Set(ByVal value As TextWrapping)
                Me.txtText.TextWrapping = value
            End Set
        End Property
    
        Public Property SelectionStart() As Integer
            Get
                Return Me.txtText.SelectionStart
            End Get
            Set(ByVal value As Integer)
                Me.txtText.SelectionStart = value
            End Set
        End Property
    
        Public Property IsEditable() As Boolean
            Get
                Return Not Me.txtText.IsReadOnly
            End Get
            Set(ByVal value As Boolean)
                Me.txtText.IsReadOnly = Not value
            End Set
        End Property
    #End Region
    
    
    End Class
     
     

      

    As long as the textbox is collapsed, it won't be counted in the "~250". So this control will display a label that looks just like a text box and leave the text box collapsed until the user clicks on the control or tabs to it.The only functional difference that I know of is that if you click and drag on a regular text box, you will begin highlighting text. With this control, clicking will correctly set the carrot position, but if the user drags the mouse, the will not get the standard highlighting. They will have to click a second time.

     

    -Rick


    Monday, April 06, 2009 3:47 PM
  • Have you tried it with sl3 beta?

     

     

    Nope, but as soon as SL3 comes out of beta, I'll be pushing for more buy in from management. It's hard enough to get the brass to get on board with a new technology, let alone trying to justify a new beta technology.Glad to hear that the issue got fixed though.

    -Rick

    Monday, April 06, 2009 3:51 PM
  • Exactly. I've been hoping to hear something from someone on the SL team about what the timeline is for SL3 rtm, but haven't seen anybody brave enough (or stupid enough) to venture a guess.

    Monday, April 06, 2009 3:54 PM
  • Well, the beta came out for MIX.

    Monday, April 06, 2009 4:09 PM
  • OK, I understand that. I guess I figured, like with most software projects the majority of us write, we have projected timelines, even for beta testing.

    So I guess I'm looking for your understanding of what the SL group is projecting, eg, 2 months in beta 1, 2 months in beta2, then rtm, so 4 months of beta testing. And if everything goes super de dooper, you may compress the beta 2 time period.

    Many of us have new projects that we are doing in SL2, but after seeing the new features in SL3, we would like to switch all our development over to that environment. We could probably convince management that we should add a couple of months to our completion time (NOT development time) if we knew that the anticipated SL3 rtm was the end of July for example.

    Monday, April 06, 2009 4:29 PM
  • The best I can give you is "second half of the year."

    Monday, April 06, 2009 5:10 PM
  • Thanks

    Monday, April 06, 2009 5:24 PM
  • I just smashed my face against this problem today... and realized... 6 months ago detected and not fixed :-(, no service pack at all for the SL 2 bugs (except for the DataGrid).

     The message here then is... we won't fix bugs on SL2, ... use SL3 Beta 1 that has no going live license and right now introduces new bugs, or just start hacking this limitations or go using nasty workarounds, quite frustrating for all us that decide to be brave and start working on SL2 RTW.

    Monday, May 04, 2009 6:33 AM
  •  I hear ya there. I was working with web services and I wanted to pass up exceptions in the .error property. After a fair bit of digging I found a way to do it through using WCF. So I blow half a week getting a framework in place to get exception handling built into my WCF web calls from Silverlight. Works great on my dev machine. Push it into the initial testing environment, and none of my web services are working. Easy enough to figure out, looked like I was no longer using an authenticated connection. No problem, switch WCF off of basic HTTP binding...

     

    Oh wait, we only get basic HTTP binding in SL2.

     

    When I can get authenticated web service calls and built in exception handling for WCF calls, I'll be happy.

    But honestly, I can't present SL to my management as a realistic solution to anything right now since we are getting near zero support for known defects. At current rate, maybe in another year or two when things stablize and MS feels like putting some effort into support, Silverlight will be ready for the business world. But until then, its use IMO is limited to kiosks, web advertising, and silly flash games.

    -Rick

    Monday, May 04, 2009 10:32 AM
  • I agree with you. But despite those drawbacks, we've managed to roll out some cool apps that exist on our intranet.

    The wcf authentication problems go away in version 3, but of course we don't know when that will be ready for prime time. 

     

    Monday, May 04, 2009 11:05 AM
  •  Yup, it's going to be an awesome platform, once they get caught up on features, stabilize, and improve support. I've got a pair of apps in production. An entry kiosk for on site after hours employee directory, and a IT only project/time tracking app that we were using to really test Silverlight's ability to handle LOB applications. And while the UI functionality blew standard web development away, the over all dev time suffered due to the limitations and known defects of SL2.

     I'll still be trying to work it into applications (a coworker just mentioned that it would be nice if we had a website with the new cafeteria's menu and daily specials on it). But I can't imagine pushing to get our CSRs' apps out of VB6/ASP to SL until SL3 comes out, and even then, only if we can be promised better support than we are getting with SL2.

     "Use the next beta version" is not acceptable support for LOB applications.

     

    -Rick

    Monday, May 04, 2009 11:53 AM
  • I'm curious to know what the issue was with authentication and WCF? Is it with forms based authentication or something? I'm using basic HTTP authentication, but, I had to write a custom HttpModule to handle it on the backend. This is one thing that I've always disliked about ASP.NET authentication. There should be a way to do basic HTTP authentication in an easy way. There are definitely a lot of rough edges that I hope get smoothed out in Silverlight 3. The fact that 2 couldn't handle web service faults was pretty lame. It made it near impossible to give meaningful errors in some cases. That's supposed to be fixed in 3.

    Monday, May 04, 2009 1:28 PM