Ho dato qualche ritocco alla Window ChooseEmoticon del mio plug-in. Innanzitutto, il WrapPanel che contiene le emoticons è contenuto a sua volta in uno ScrollViewer che, se necessario, mostra una barra di scorrimento verticale.
<ScrollViewer Grid.Column="0" Grid.Row="1"
VerticalScrollBarVisibility="Visible">
<WrapPanel DataContext="barSize"
Name="MainPanel">
<WrapPanel.ItemWidth>
<Binding ElementName="barSize" Path="Value" Mode="TwoWay"/>
</WrapPanel.ItemWidth>
<WrapPanel.ItemHeight>
<Binding ElementName="barSize" Path="Value" Mode="TwoWay"/>
</WrapPanel.ItemHeight>
</WrapPanel>
</ScrollViewer>
Questo non vi obbliga più a ridimensionare la finestra per vedere tutte le emoticons. Potete agire sulla ScrollBar verticale o potete ridimensionare, come siete più comodi.
Ho attivato inoltre un piccolo meccanismo di data-binding. Ho bindato il controllo WrapPanel all'oggetto barSize e ho bindato le proprietà ItemWidth ed ItemHeight del WrapPanel alla proprietà Value di un'altra ScrollBar orizzontale che ho posizionato sulla Window. La ScrollBar è molto comoda, perchè agendo su di essa si ridimensionano i Button delle emoticons.
<ScrollBar Margin="2"
Grid.Column="0" Grid.Row="3"
Name="barSize" Orientation="Horizontal"
LargeChange="20" SmallChange="5"
Minimum="5" Maximum="500"
Value="{StaticResource Size}"/>
La proprietà Value della ScrollBar viene inizializzata dalla risorsa chiamata Size che, come abbiamo detto l'altra volta, viene iniettata via C# prelevando il valore dalla classe VivendoByteEmoticonsSettings. Come ho detto nei precedenti post, il valore di ItemWidth ed ItemHeight fa parte dei settings: quando la Window viene chiusa, salvo il valore per fare in modo che venga persistito fra più sessioni. Per farlo, faccio l'override di OnClosed:
protected override void OnClosed(EventArgs e)
{
_settings.Size = MainPanel.ItemHeight;
_settings.Save();
base.OnClosed(e);
}
Il file dei settings è per-user, e viene salvato in C:\Documents and Settings\Damiani\Local Settings\Application Data\Microsoft_Corporation\WindowsLiveWriter.exe_StrongName_d24s4tba5huluuxhypp0rk3iqftkbmdu\1.0.0.141. Credo che il plug-in, vivendo hostato dentro Windows Live Writer, prenda giustamente il nome della società ed il nome dell'assembly EXE che sta girando, e quindi...