Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια

CloseTabBehavior για TabItems σε Silverlight TabControl

Χρησιμοποιώντας το tabcontrol του Silverlight, είδα ότι δεν έχει close button σε κάθε tab. Μερικές λύσεις που είδα από το net, έκαναν extend ένα tabItem, ή έβαζαν handler κάπου για να το υλοποιήσουν. Έτσι έφτιαξα ένα behavior το οποίο γίνεται attach, λίγο πιο κομψά. Στο OnClick, υλοποίησα ένα μικρό chunk λογικής για να διατηρείται το state.

To itemtemplate

<TabControl.ItemTemplate>     <DataTemplate>         <DockPanel Width="120">             <Button Content="X"                                                     Cursor="Hand"                     DockPanel.Dock="Right"                     Focusable="False"                     FontFamily="Courier"                     FontSize="9"                     FontWeight="Bold"                      Margin="0,1,0,0"                     Padding="0"                     VerticalContentAlignment="Bottom"                     Width="16" Height="16" >                 <interactivity:Interaction.Behaviors>                     <behavior:CloseTabBehavior/>                 </interactivity:Interaction.Behaviors>             </Button>             <ContentPresenter Content="{Binding ApplicationName}"                     VerticalAlignment="Center" />         </DockPanel>     </DataTemplate> </TabControl.ItemTemplate>

To behavior

public class CloseTabBehavior : Behavior<Button> {     protected override void OnAttached()     {         AssociatedObject.Click += OnClick;     }     protected override void OnDetaching()     {         AssociatedObject.Click -= OnClick;     }     private static void OnClick(object sender, RoutedEventArgs e)     {         TabItem tabItem = (sender as Button).GetParent<TabItem>();         object selectedItem = tabItem.DataContext;         TabControl tabControl = (sender as Button).GetParent<TabControl>();         IList list = (IList) tabControl.ItemsSource;         int index = list.IndexOf(selectedItem);         if (list.Count == 1)             tabControl.SelectedItem = null;         else if (index < list.Count - 1 )             tabControl.SelectedItem = list[++index];         else if (index == list.Count - 1)             tabControl.SelectedItem = list[--index];         try         {             list.Remove(selectedItem);         }         catch (Exception ex)         {             Debug.WriteLine(ex.Message);         }     } }

Όποιος έχει κάτι να προσθέσει, feel free!

 


Posted: Δευτέρα, 29 Νοεμβρίου 2010 2:39 μμ από το μέλος George J. Capnias
Δημοσίευση στην κατηγορία: ,

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)

(απαιτούμενο)

(προαιρετικό)

(απαιτούμενο)
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image

Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια