对于这个问题的任何帮助都会非常感激,因为我一整天都在寻找这个地区的答案!
我通过向App.xaml添加合并字典,将全局样式应用于我的WPF应用程序。这已经在应用程序中应用了类似预期的样式,但是我已经完成了很多我无法完全理解的事情。
我可以给你一个风格正在应用的代码,如果这会有所帮助,但它非常大,所以尽管最好不要阻塞这篇文章。该样式将背景颜色应用于每个列表框项目,以及将鼠标悬停在动画和颜色更改上。这个样式不适用于我的应用程序中的几个列表框,但代码示例如下:
<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时更改背景颜色。如果没有基于on属性,则行成功地将颜色更改为红色。应用样式时,它永远不会更改颜色,并始终应用模板中的橙色。
HELP ?????
非常感谢,
标记
答案 0 :(得分:0)
<Style x:Key="BaseListBoxItem" d:IsControlPart="True" TargetType="{x:Type ListBoxItem}">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Padding" Value="3" />
<Setter Property="Foreground" Value="{StaticResource OutsideFontColor}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ControlTemplate.Resources>
<Storyboard x:Key="HoverOn">
<DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundGradientOver"
Storyboard.TargetProperty="Opacity" To="0.73" />
</Storyboard>
<Storyboard x:Key="HoverOff">
<DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundGradientOver"
Storyboard.TargetProperty="Opacity" To="0" />
</Storyboard>
<Storyboard x:Key="SelectedOn">
<DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundGradientSelected"
Storyboard.TargetProperty="Opacity" To="0.84" />
<DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundGradientSelectedDisabled"
Storyboard.TargetProperty="Opacity" To="0.55" />
</Storyboard>
<Storyboard x:Key="SelectedOff">
<DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundGradientSelected"
Storyboard.TargetProperty="Opacity" To="0" />
<DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundGradientSelectedDisabled"
Storyboard.TargetProperty="Opacity" To="0" />
</Storyboard>
</ControlTemplate.Resources>
<Grid SnapsToDevicePixels="true">
<Rectangle x:Name="BackgroundGradientOver" RadiusX="1" RadiusY="1" Stroke="{DynamicResource MouseOverBorderBrush}"
Opacity="0" Fill="{DynamicResource MouseOverBrush}"/>
<Rectangle x:Name="BackgroundGradientSelectedDisabled" RadiusX="1" RadiusY="1" Opacity="0" Fill="{DynamicResource
ListItemSelectedBrush}" Stroke="{DynamicResource ListItemSelectedBorderBrush}"/>
<Rectangle x:Name="BackgroundGradientSelected" Stroke="{DynamicResource PressedBorderBrush}" StrokeThickness="1"
RadiusX="1" RadiusY="1" Opacity="0" Fill="{DynamicResource PressedBrush}">
</Rectangle>
<ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"
ContentTemplate="{TemplateBinding ContentTemplate}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource SelectedOff}" x:Name="SelectedOff_BeginStoryboard" />
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectedOn}" x:Name="SelectedOn_BeginStoryboard" />
</Trigger.EnterActions>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource HoverOff}" x:Name="HoverOff_BeginStoryboard" />
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource HoverOn}" />
</Trigger.EnterActions>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>