tags:

views:

412

answers:

2

Hi, my problem is that i have three tab controls each with a listbox that has style for both the ListBox and the ItemContainerStyle, the styles are the same on all listboxes inside the tabs.

two of the tabs are databound using a CollectionViewSource.

The problem is as soon as i try to go into tab 2 i get an exception and i cant seem to find out where from (i tired enabling first chance exceptions as well and nothing )

playing around with it i found out that if i remove the ItemContainerStyle form the ListBox in tab two it no longer crashes. another way to stop it form crashing is not to have any items in the listbox. and another way is instead of using a CollectionViewSource use a GetDefaultView() on the list and bind to that.

here are the lines i use to bind to the listboxes:

        this.FListViewSource = (this.FindResource("FirstCollectionViewSource") as AutoRefreshCollectionViewSource);
        this.FListViewSource.Source = this.FirstList;
        this.FListView = (this.FListViewSource.View as ListCollectionView);


       this.SListViewSource = (this.FindResource("SecondCollectionViewSource") as AutoRefreshCollectionViewSource);
       this.SListViewSource.Source = testing;
        this.SListView = (this.SListViewSource.View as ListCollectionView);

this is the XAML for the tab control :

          <TabControl Width="Auto" Height="Auto">
                    <TabItem Header="tab 1">
                        <StackPanel Name =first_Panel" >
                            <ListBox  Style="{StaticResource lb_ms}"  ItemContainerStyle="{StaticResource black_lb}" Width="160"  Name="first_lb"  
                                      ItemsSource="{Binding}" DisplayMemberPath="name" MinHeight="400" MaxHeight="500" ButtonBase.Click="lb_Click" Margin="5,0,5,0"/>

                        </StackPanel>
                    </TabItem>
                    <TabItem Header="tab 2">
                        <StackPanel Name ="second_Panel"  DataContext="{Binding Source={StaticResource FirstCollectionViewSource}}" FlowDirection="LeftToRight" Background="#333333">

                            <ListBox  ItemsSource="{Binding}" Style="{StaticResource lb_ms}"  ItemContainerStyle="{StaticResource black_lb}" Width="160"  Name="second_lb"  
                                      DisplayMemberPath="name"  MinHeight="400" MaxHeight="500" ButtonBase.Click="lb_Click" Margin="5,0,5,0"/>        
                      </StackPanel>
                    </TabItem>
                    <TabItem Header="Media">

                    </TabItem>
                    <TabItem Header="Domains">
                        <StackPanel Name ="third_Panel" DataContext="{Binding Source={StaticResource SecondCollectionViewSource}}" FlowDirection="LeftToRight" Background="#333333">

                            <ListBox  Style="{StaticResource lb_ms}"  ItemContainerStyle="{StaticResource black_lb}" Width="160"  Name="third_lb"  
                                      ItemsSource="{Binding}" DisplayMemberPath="name" MinHeight="400" MaxHeight="400" ButtonBase.Click="lb_Click" Margin="5,0,5,0" SelectionMode="Multiple" />

                        </StackPanel>
                    </TabItem>
                </TabControl>

this is the resource directory that contains the styles:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Brushes.xaml" />
</ResourceDictionary.MergedDictionaries>

<Style x:Key="black_lb" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Foreground" Value="#FFFFFF" />
    <Setter Property="FontFamily" Value="Verdana" />
    <Setter Property="FontSize" Value="11" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Canvas Name="can" Width="Auto" Height="25">
                    <Rectangle  Name="filler" Canvas.Top="0" Canvas.Left="0" Width="200" Height="25">
                        <Rectangle.Fill>
                            <SolidColorBrush x:Name="fillb" Color="#333333"/>
                        </Rectangle.Fill>
                    </Rectangle>
                    <Path d:LastTangent="0,0" Stroke="{x:Null}" Fill="#FF6E00" HorizontalAlignment="Right" VerticalAlignment="Top" Width="7" Height="7" Canvas.Left="15" Opacity="0" Canvas.Top="6" x:Name="Path" RenderTransformOrigin="0.5,0.5" Stretch="Fill" Data="M601.11544,190.39485 L590.06202,213.0964 613,213">
                        <Path.RenderTransform>
                            <TransformGroup>
                                <RotateTransform Angle="90"/>
                            </TransformGroup>
                        </Path.RenderTransform>
                    </Path>

                    <StackPanel Panel.ZIndex="1000" Name="ActionsContainer" Visibility="Hidden" Canvas.Right="0" HorizontalAlignment="Right"  Orientation="Horizontal">
                        <Button Name="btn_edit" FontSize="10" Content="Edit" Height="20" Width="Auto"/>
                        <Button Name="btn_delete" FontSize="10" Content="Delete" Height="20" Width="Auto"/>
                    </StackPanel>
                    <ContentPresenter Name="con" Canvas.Top="2" Canvas.Left="10"/>

                            <!--
                    <ContentPresenter Name="con" Content="{TemplateBinding ContentControl.Content}" />
                    <ContentControl Name="DesignerItem"
                                 Canvas.Top="2"
                                Canvas.Left="10"
                                />
                    -->



                </Canvas>


                <ControlTemplate.Resources>
                    <Storyboard x:Key="SelectedStory">

                        <ColorAnimation Storyboard.TargetName="fillb" Storyboard.TargetProperty="(SolidColorBrush.Color)" From="#333333" To="#111111" Duration="0:0:0.1" />

                        <DoubleAnimation Storyboard.TargetName="con" Storyboard.TargetProperty="(Canvas.Left)" From="10" To="30" Duration="0:0:0.1" />
                        <DoubleAnimation Storyboard.TargetName="Path" Storyboard.TargetProperty="(Path.Opacity)" From="0" To="1" Duration="0:0:0.1" />
                        <DoubleAnimation Storyboard.TargetName="Path" Storyboard.TargetProperty="(Canvas.Left)" From="15" To="10" Duration="0:0:0.2" />
                    </Storyboard>

                    <Storyboard x:Key="unSelectedStory">

                        <ColorAnimation  Storyboard.TargetName="fillb" Storyboard.TargetProperty="(SolidColorBrush.Color)" From="#111111" To="#333333" Duration="0:0:0.8" />

                        <DoubleAnimation Storyboard.TargetName="con" Storyboard.TargetProperty="(Canvas.Left)" From="30" To="10" Duration="0:0:0.3" />
                        <DoubleAnimation Storyboard.TargetName="Path" Storyboard.TargetProperty="(Path.Opacity)" From="1" To="0" Duration="0:0:0.1" />
                        <DoubleAnimation Storyboard.TargetName="Path" Storyboard.TargetProperty="(Canvas.Left)" From="10" To="15" Duration="0:0:0.1" />
                    </Storyboard>

                    <Storyboard x:Key="CurrentlySlecetedStory">

                        <ColorAnimation Storyboard.TargetName="fillb" Storyboard.TargetProperty="(SolidColorBrush.Color)" From="#111111" To="#111111" Duration="0:0:0.1" />

                        <DoubleAnimation Storyboard.TargetName="con" Storyboard.TargetProperty="(Canvas.Left)" From="30" To="30" Duration="0:0:0.1" />
                        <DoubleAnimation Storyboard.TargetName="Path" Storyboard.TargetProperty="(Path.Opacity)" From="1" To="1" Duration="0:0:0.1" />
                        <DoubleAnimation Storyboard.TargetName="Path" Storyboard.TargetProperty="(Canvas.Left)" From="10" To="15" Duration="0:0:0.2" />
                    </Storyboard>

                    <SolidColorBrush x:Key="fillb" Color="#333333" />
                </ControlTemplate.Resources>

                <ControlTemplate.Triggers>


                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="ListBoxItem.IsMouseOver" Value="True" />
                            <Condition Property="ListBoxItem.IsSelected" Value="True" />
                        </MultiTrigger.Conditions>
                           <MultiTrigger.Setters>
                               <Setter TargetName="ActionsContainer" Property="Visibility" Value="{x:Static Visibility.Visible}"/>
                           </MultiTrigger.Setters>
                    </MultiTrigger>




                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="ListBoxItem.IsMouseOver" Value="True" />
                            <Condition Property="ListBoxItem.IsSelected" Value="False" />
                        </MultiTrigger.Conditions>
                        <MultiTrigger.EnterActions>

                            <BeginStoryboard Selector.IsSelected="True"  Storyboard="{StaticResource SelectedStory}">

                            </BeginStoryboard>
                        </MultiTrigger.EnterActions>
                        <MultiTrigger.ExitActions>
                            <BeginStoryboard Storyboard="{StaticResource unSelectedStory}">
                            </BeginStoryboard>
                        </MultiTrigger.ExitActions>
                    </MultiTrigger>



                    <EventTrigger RoutedEvent="ListBoxItem.Selected">
                        <EventTrigger.Actions>
                            <BeginStoryboard  Name="SelectedItemStory" Storyboard="{StaticResource CurrentlySlecetedStory}">

                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>

                    <EventTrigger RoutedEvent="ListBoxItem.Unselected">
                        <EventTrigger.Actions>
                           <StopStoryboard BeginStoryboardName="SelectedItemStory" />
                        </EventTrigger.Actions>
                    </EventTrigger>

                </ControlTemplate.Triggers>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>



<Style x:Key="lb_ms" TargetType="ListBox">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
    <Setter Property="MinWidth" Value="120"/>
    <Setter Property="MinHeight" Value="95"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBox">
                <Border 
                                          Name="Border" 
                                          Background="#333333"

                                          BorderBrush="{StaticResource SolidBorderBrush}"
                                          BorderThickness="1"
                                          CornerRadius="5">
                    <ScrollViewer 
                                            Margin="0"
                                            Focusable="false">
                        <StackPanel Margin="2" IsItemsHost="True" />
                    </ScrollViewer>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter TargetName="Border" Property="Background"
                                                    Value="{StaticResource DisabledBackgroundBrush}" />
                        <Setter TargetName="Border" Property="BorderBrush"
                                                    Value="{StaticResource DisabledBorderBrush}" />
                    </Trigger>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

A: 

For it not to crash i had to add SelectionMode="Multiple" on the listbox that used the style, the question is why?

A: 

Same Problem but I set Textbox's property. Anyways I didnt Find Any solution

jiten
Some says Its a Bug in .NET So u cant do much on it
jiten