Witajcie !
Mam ListBoxa i dla jego "elementów" przypisuję DataTemplate w zależności od tego czy dany element jest IsSelected czy też nie. To mi działa idealnie. Zamieszczam kod, a poniżej opis problemu:
<UserControl x:Class="Logowanie.Kontrolki.Moduly.cModuleHistoryPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="640">
<UserControl.Resources>
<DataTemplate x:Key="resListItem">
<Grid Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ActualWidth}">
<Border CornerRadius="10" Background="#BC067878" BorderBrush="Black">
<TextBlock Text="NORMALNY" />
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="resListSelecetedItem">
<Border CornerRadius="15" Background="#BC067878" BorderBrush="Black">
<TextBlock Text="ZAZNACZONY" />
</Border>
</DataTemplate>
<Style TargetType="{x:Type ListBoxItem}" x:Key="ListBoxContainerStyle">
<Setter Property="ContentTemplate" Value="{StaticResource resListItem}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource resListSelecetedItem}"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid Opacity="0">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Visible}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.200" Storyboard.TargetProperty="Opacity" From="1" To="0"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.200" Storyboard.TargetProperty="Opacity" From="0" To="1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Border Background="Black" BorderThickness="3" CornerRadius="10" BorderBrush="#FF457BB2" Grid.ColumnSpan="10" Grid.RowSpan="10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="75"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="75"/>
<RowDefinition Height="*"/>
<RowDefinition Height="25"/>
<RowDefinition Height="5"/>
</Grid.RowDefinitions>
<Image Source="Zasoby/ModuleHistory.png" Margin="5,5,5,5"/>
<ListBox x:Name="hDataGrid" Grid.Column="1" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxContainerStyle}">
</ListBox>
</Grid>
</Border>
</Grid>
</UserControl>
Na początku bez określania długości grid'a elementy wyglądały tak:
Moim kolejnym celem było rozszerzyć grid'a tak, aby dopasowywał długość na cały obszar elementu. Użyłem do tego celu relative source, lecz wtedy w ogóle nie było widać elementów.
<Grid Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ActualWidth}">
<Border CornerRadius="10" Background="#BC067878" BorderBrush="Black">
<TextBlock Text="NORMALNY" />
</Border>
</Grid>
Spróbowałem wtedy tak:
<Grid Width="{Binding ElementName=hListBox, Path=ActualWidth}">
Grid faktycznie się rozciągnął, niestety aż za bardzo, ponieważ dopasował się do rozmiaru ListBoxa, a nie Elementu ListBoxa. Rysunek poniżej.
jak widać prawa strona elementu wychodzi poza obszar ListBoxa.
Potrafi ktoś naprowadzić i pomóc?
EDIT:
hListBox == hDataGrid (zmieniłem podczas analizowania kodu i pisania postu)