Любая помощь по этой проблеме будет принята с благодарностью, так как я весь день искал ответы на вопросы, касающиеся этой области!
Я применил глобальный стиль к своему приложению WPF, добавив объединенный словарь в файл App.xaml. Это применило стиль к приложению, как и предполагалось, но есть ряд вещей, которые он сделал, которые я не до конца понимаю.
Я могу дать вам код, который применяет стиль, если это поможет, но он довольно большой, поэтому лучше не засорять этот пост. Стиль применяет цвет фона к каждому элементу списка, а также крутит над анимацией и изменением цвета. Этот стиль не был применен к паре списков в моем приложении, хотя пример кода ниже:
<StackPanel Margin="0,15,0,0" Width="auto" HorizontalAlignment="Left">
<StackPanel.Resources>
<converter:IntToBoolConverter x:Key="intToBoolConverter" />
<converter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />
</StackPanel.Resources>
<Label Content="Required Vehicles" HorizontalAlignment="Center" FontWeight="Bold" />
<ListBox x:Name="lstVehicleRequests" ItemsSource="{Binding VehicleRequests}" Width="auto"
IsSynchronizedWithCurrentItem="True">
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource BaseListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=RequestStatus.RequestStatusId}" Value="7">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFFFFFFB" Offset="0" />
<GradientStop Color="IndianRed" Offset="0.5" />
<GradientStop Color="#FFFFFFFB" Offset="1" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="4" />
</Grid.RowDefinitions>
<StackPanel Margin="0,8,0,0">
<TextBlock Margin="0,4,10,0" >
<Label Content="Coach Type" Width="120" />
<ComboBox ItemsSource="{Binding DataContext.CoachTypes,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
SelectedItem="{Binding CoachType}" DisplayMemberPath="Name" Width="100" />
</TextBlock>
<TextBlock Margin="0,8,10,0">
<Label Content="No of Passengers" Width="120" />
<TextBox
keys:ValidKeys.Numeric="True"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Style="{StaticResource textBoxInError}" Width="50">
<TextBox.Text>
<Binding Path="Passengers"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<val:RegularExpressionRule
ErrorDescription="Please Enter a Numeric Size"
RegularExpression="^\d*$" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</TextBlock>
<TextBlock Margin="0,8,10,0">
<Label Content="No of Drivers" Width="120" />
<TextBox
keys:ValidKeys.Numeric="True"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Style="{StaticResource textBoxInError}" Width="50">
<TextBox.Text>
<Binding Path="Drivers"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<val:RegularExpressionRule
ErrorDescription="Please Enter a Numeric Size"
RegularExpression="^\d*$" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</TextBlock>
<TextBlock Margin="0,8,10,0">
<Label Content="Positioning Feeder Drivers" Width="120" />
<TextBox
keys:ValidKeys.Numeric="True"
Style="{StaticResource textBoxInError}" Width="50" MaxLength="3">
<TextBox.Text>
<Binding Path="PositioningFeederDrivers"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<val:RegularExpressionRule
ErrorDescription="Please Enter a Numeric Size"
RegularExpression="^\d*$" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</TextBlock>
<TextBlock Margin="0,8,10,0">
<Label Content="Wheelchair Access" Width="120" />
<ComboBox Width="100" SelectedIndex="{Binding WheelchairAccess,
Converter={StaticResource intToBoolConverter}}">
<ComboBoxItem Content="Not Required" />
<ComboBoxItem Content="Required" />
</ComboBox>
</TextBlock>
<TextBlock Margin="0,8,10,8">
<Label Content="Trailer" Width="120" />
<ComboBox Width="100" SelectedIndex="{Binding Trailer,
Converter={StaticResource intToBoolConverter}}">
<ComboBoxItem Content="Not Required" />
<ComboBoxItem Content="Required" />
</ComboBox>
</TextBlock>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
Затем я добавил свойство BasedOn, как вы можете видеть выше, почему я должен был сделать это, чтобы применить стиль к этому списку? Другие списки и другие элементы управления подобрали это автоматически?
В любом случае, вы увидите, что у меня есть блок данных с этим списком, который должен менять цвет фона, когда id состояния запроса = 7. Без свойства based на основе строка успешно меняет цвет на красный. Когда стиль применяется, он никогда не меняет цвет, и всегда применяется оранжевый цвет из шаблона.
HELP ?????
Очень ценится,
Mark