5 komentářů k článku Dynamicky generované komponenty v Silverlightu 2.0:

    1. Jan JelínekAutor příspěvku

      Re: XamlReader
      jj… XamlReader je naprosto zásadní například v případě, že použijeme MVC pattern a Model bude na straně serveru. (s tímto se teď peru ve své bakalářce:-)

  1. Rene.Stein

    Popup v Silverlightu
    Pěkný článek, Když se tu bavíme o dynamickém generování UI, tak bych chtěl upozornit na jednu nepřijšmnou vlastnost-bug v Silverlightu.
    Jestliže máte vlastni User Control, ve kterém je Popup a ztento Popup neobsahuje ListBox (a možná další prvky), je možné Popup zobrazit a používat, aniž by byl přidán do kolekce Children. Takto definovaný POPUP funguje bez problémů.

    <pexeso:popupbase x:class="RStein.Pexeso.SaveFile" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:pexeso="clr-namespace:RStein.Pexeso">
    <grid x:name="LayoutRoot" background="Black">
    <popup name="filesPopup">
    <popup.child>
    <stackpanel orientation="Vertical" background="Red">
    <textblock text="Název souboru s uloženou hrou" fontsize="15" margin="5,5,5,0" horizontalalignment="Left" foreground="White" textdecorations="Underline"></textblock>
    <stackpanel orientation="Horizontal">
    <textbox name="txtFile" margin="5" minwidth="200"></textbox>
    <textblock foreground="Yellow" visibility="Collapsed" name="txtError" text="Musíte zadat platný název souboru!" horizontalalignment="Left" verticalalignment="Center" fontweight="Bold" fontsize="10"></textblock>
    </stackpanel>
    <stackpanel orientation="Horizontal" margin="5">
    <button style="{StaticResource DialogButton}" content="Uložit" name="btnSelect" click="btnSelect_Click"></button>
    <button style="{StaticResource DialogButton}" content="Zpět" name="btnBack" click="btnCancel_Click"></button>
    </stackpanel>
    </stackpanel>
    </popup.child>
    </popup>
    </grid>
    </pexeso:popupbase>

    Jestliže ale Popup obsahuje Listbox (a pravděpodobně i jiné prvky), Popup se zuobrazí, ale při vybrání libovolné položky v ListBoxu celý plugin do obsluhy události UnhandledException a napíše jen něco o interní fatální chybě. Mimochodem, Bety a RC Silverlightu tohle podle mě nedělaly.

    Tento popup způsobí pád Silverlightu, jestliže Popup není přidán do kolekce Children.

    <pexeso:popupbase x:class="RStein.Pexeso.SelectFile" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:pexeso="clr-namespace:RStein.Pexeso">
    <grid x:name="LayoutRoot" background="Black">
    <popup name="filesPopup">
    <popup.child>
    <stackpanel orientation="Vertical" background="Red">
    <textblock text="Vyberte uloženou hru" fontsize="15" margin="5,5,5,0" horizontalalignment="Left" foreground="White" textdecorations="Underline"></textblock>
    <textblock foreground="Yellow" visibility="Collapsed" fontsize="10" name="txtError"></textblock>
    <border cornerradius="20" background="White">
    <listbox name="lstFiles" background="Orange" height="200">
    <listbox.itemtemplate>
    <datatemplate>
    <textblock text="{Binding Mode=OneWay}" foreground="White"></textblock>
    </datatemplate>
    </listbox.itemtemplate>
    </listbox>
    </border>
    <stackpanel orientation="Horizontal">
    <button style="{StaticResource DialogButton}" content="Vybrat soubor" name="btnSelect" click="btnSelect_Click"></button>
    <button style="{StaticResource DialogButton}" content="Zpět" name="btnBack" click="btnCancel_Click"></button>
    </stackpanel>
    </stackpanel>
    </popup.child>
    </popup>
    </grid>
    </pexeso:popupbase>

    Před zobrazením Popupu tedy musíme vždy přidat Popu do kolekce Children a po uzavřeni Popupu jej případně odebrat.

    rivate void btnLoad_Click(object sender, RoutedEventArgs e)
    {
    SelectFile file = new SelectFile();
    var files = FileAccessComponent.Instance.GetRootFiles();
    if (files.Length == 1)
    {
    return;
    }

    file.FileListBox.ItemsSource = files;

    LayoutRoot.Children.Add(file);

    file.DialogClosed += file_DialogClosed;
    showPopup(file.FilesPopup);
    file.FileListBox.Focus();
    }

    DialogClosed je moje vlastní událost v předkovi pro všechny dialogy.

    {
    SelectFile sfDialog = sender as SelectFile;

    try
    {
    if (sfDialog.LastResult == DialogResult.OK && sfDialog.FileListBox.SelectedItem != null)
    {
    m_currentGame = PexesoGame.Load(sfDialog.FileListBox.SelectedItem.ToString());
    removeButtons();
    rebindGameData();
    }
    }
    catch (Exception e1)
    {
    Console.WriteLine(e1);
    }
    finally
    {
    LayoutRoot.Children.Remove(sfDialog); //Pridat do kolekce
    sfDialog.DialogClosed -= saveFileDialog_DialogClosed;
    hidePopup(sfDialog.FilesPopup);
    }

    }

    1. janis

      Re: Popup v Silverlightu

      Komponenty z toolkitu ani tak v popup nefungují. A bohežel další dost
      omezující chyba. Při smázání záznamu z gridu se grid nepřekreslí a
      zůstane v něm prázdný řádek po smazaném záznamu. Pokud uživatel
      smázne záznamy v gridu všechny, poslední dva řádky se nesmažou a
      zůstanou prázdné.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=2954