Avatar
ORRNY99
Člen
Avatar
ORRNY99:

Ahoj lidi,
pracuji na takovým malým "projektíku" a potřeboval bych trochu poradit. Neví někdo jak, by se dal udělat ListBox s "rozšiřující libovolnou položkou". Myslím si že obrázek napoví více. Díky moc.

Když tak přikládám zdroják co jsem teď napsal: Test ListBoxu ke stažení

<ListView x:Name="ListViewData"
                 ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                 VirtualizingStackPanel.VirtualizationMode="Recycling"
                 VirtualizingStackPanel.IsVirtualizing="True"
                 IsSynchronizedWithCurrentItem="True"
                 SelectedItem="{Binding SelectedItemListView}"
                 ItemsSource="{Binding EmployeesDataList}" Background="{x:Null}" BorderBrush="{x:Null}" >
            <ie:Interaction.Triggers >
                <ie:EventTrigger EventName="SelectionChanged">
                    <ie:InvokeCommandAction Command="{Binding SelectedItemCommand}"
            CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"/>
                </ie:EventTrigger>
            </ie:Interaction.Triggers>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel VirtualizingPanel.IsVirtualizing="True" Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <!-- ItemContainerStyle -->
            <ListView.ItemContainerStyle>

                <Style TargetType="{x:Type ListViewItem}">

                    <Setter Property="Template">

                        <Setter.Value>
                            <ControlTemplate TargetType="ListViewItem">
                                <Grid  Focusable="False"  >
                                    <Rectangle  Focusable="False"  Fill="{TemplateBinding Background}" />
                                    <ContentPresenter Margin="3" />
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>

                    </Setter>

                    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver"
                    Value="True">
                            <Setter Property="Background"
                    Value="#00000000" />
                        </Trigger>
                        <Trigger Property="IsSelected"
                    Value="True">
                            <Setter Property="Background"
                    Value="#00ADD8E6" />
                        </Trigger>


                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
            <!-- ItemTemplate -->
            <ListView.ItemTemplate>
                <DataTemplate>
                    <DataTemplate.Resources>
                        <!-- In your resources section of the XAML -->
                        <!--<BooleanToVisibilityConverter x:Key="BoolToVis" />-->
                        <DropShadowEffect x:Key="z-depth4" BlurRadius="25" ShadowDepth="8" Direction="270" Color="#BBBBBB"/>
                    </DataTemplate.Resources>
                    <Grid Effect="{StaticResource z-depth4}" d:DesignWidth="250" d:DesignHeight="100" Width="250" Height="100" Background="{Binding Colors}" >
                        <TextBlock x:Name="txtId" TextOptions.TextFormattingMode="Display" RenderOptions.BitmapScalingMode="NearestNeighbor" Margin="39,25,0,0" Text="{Binding Id}" FontSize="33.333" HorizontalAlignment="Left" Width="Auto" Foreground="White" VerticalAlignment="Top" Panel.ZIndex="3">
                            <TextBlock.Effect>
                                <DropShadowEffect ShadowDepth="4"
                        Direction="330"
                        Color="Black"
                        Opacity="0.5"
                        BlurRadius="4"/>
                            </TextBlock.Effect>
                        </TextBlock>

                        <Rectangle x:Name="Rectangle2" HorizontalAlignment="Stretch" Height="Auto" VerticalAlignment="Stretch" Width="Auto" Panel.ZIndex="4" Fill="#00000000" Margin="0,0,0,1">
                        </Rectangle>

                        <Grid x:Name="pathSelected" HorizontalAlignment="Left" Width="30" Height="30" VerticalAlignment="Top" Margin="71,0,0,0" Visibility="Hidden" Panel.ZIndex="3">
                            <Polygon x:Name="checkPoly" Points="0,0 29,29 29,0 0,0" Stroke="Purple" StrokeThickness="0" Width="30" Height="29"
                                        VerticalAlignment="Top" HorizontalAlignment="Right" Fill="Red" />
                            <Path Stroke="White" Data="M 6,6 L 9, 9 L 16,2" StrokeThickness="2"
                                        VerticalAlignment="Top" HorizontalAlignment="Right" Panel.ZIndex="1" Margin="0,3.25,2.75,0" />

                        </Grid>

                        <!--<Path x:Name="pathSelected" Stroke="White" Data="M 6,6 L 9, 9 L 16,2" StrokeThickness="2" Margin="37,36,0,0"
                                      VerticalAlignment="Top" HorizontalAlignment="Left" Height="25" Stretch="Fill" Width="25" Panel.ZIndex="3" Visibility="Visible" />-->
                        <TextBlock TextOptions.TextFormattingMode="Display" RenderOptions.BitmapScalingMode="HighQuality" TextTrimming="CharacterEllipsis" x:Name="txtTitle" HorizontalAlignment="Stretch" Margin="112,10,10,0" TextWrapping="Wrap" Text="{Binding Title}" VerticalAlignment="Top" Height="23" Width="Auto" FontSize="17.333"/>
                        <TextBlock TextOptions.TextFormattingMode="Display" RenderOptions.BitmapScalingMode="HighQuality" TextTrimming="CharacterEllipsis" x:Name="txtName" Margin="112,43,0,0" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" Height="Auto" Width="128" HorizontalAlignment="Left"/>
                        <Rectangle x:Name="Rectangle1"  HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Panel.ZIndex="2" Fill="#7F143EB0" Margin="0,0,-4.5,0" Visibility="Hidden"/>

                    </Grid>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type ListViewItem}, Mode=FindAncestor}}" Value="True">
                            <Setter TargetName="pathSelected" Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type ListViewItem}, Mode=FindAncestor}}" Value="True">
                            <Setter TargetName="Rectangle1" Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
 
Odpovědět 14. června 19:39
Avatar
Lako
Člen
Avatar
 
Nahoru Odpovědět 15. června 20:11
Avatar
ORRNY99
Člen
Avatar
Odpovídá na Lako
ORRNY99:

Změnu DataTemplatu jsem už zkoušel a požadovaného efektu jsem nedocílil. Myslím si, že to je hlubší problém a změna DataTemplatu tady asi nepomůže. Jinak díky za radu.

 
Nahoru Odpovědět 16. června 20:19
Avatar
Lako
Člen
Avatar
Odpovídá na ORRNY99
Lako:

A změnilo ti to ten datatemplate? Jestli jo, tak to stačí už ho jenom upravit, jestli na, tak bych se zaměřil na to.
Ten postup vypadá dost přímočaře... Nebo jaký hlubší problém máš na mysli?

(ještě mě napadlo - mluvíš o listboxu, ale máš tam listview - nemá třeba listview nějaké omezení, že musí být všechny prvky stejné?)

 
Nahoru Odpovědět 16. června 23:12
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na ORRNY99
Petr Nymsa:

Myslím si, že DataTemplate k tomu postačí. Vyrobil bych template pro "vybraný prvek" a ten by v sobě měl požadovaný grid s detailem těch položek -> pak už by stačilo jen správně napojit nějaký ViewModel a správně udělat "Bindnig"

Nahoru Odpovědět 16. června 23:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.