У меня есть элемент управления ListView со списком системных сообщений в нем, и соответствующую кнопку «действие», которое поможет мой пользователь разрешить сообщение:ListView Стиль Trigger затрагивающий один элемент управления, а не иначе
Если сообщение является сообщением об ошибке, я хочу, чтобы передняя часть текста и кнопка действия (часть [more ...]) стали красными. Как вы можете видеть, это не так.
Я использую Style.Trigger, связанный с серьезностью данных сообщений, чтобы установить Foreground. Это отлично работает для TextBlock в DataTemplate, но не влияет на кнопку в этом шаблоне. Моя XAML выглядит следующим образом:
<ListView x:Name="ImageCenterStatus" Background="{DynamicResource SC.ControlBrush}" Margin="10,22,10,0" FontSize="12" Grid.Column="1" ClipToBounds="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock TextWrapping="WrapWithOverflow" cal:Message.Attach="[Event MouseUp] = [Action DoStatusAction($dataContext)]" Text="{Binding Path=DisplayedMessage}"/>
<Button x:Name="ActionButton" Content="{Binding Path=DisplayedActionLabel}" FontSize="12" cal:Message.Attach="DoStatusAction($dataContext)" Style="{DynamicResource SC.ActionButtonHack}"></Button>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="Warning">
<Setter Property="Foreground" Value="#FFCE7A16" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Foreground" Value="#FFD13636" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Кнопка имеет свой собственный стиль, SC.ActionButtonHack, но я очень осторожно, чтобы не переопределять на переднем плане в любом месте, что стиль:
<Style x:Key="SC.ActionButtonHack" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Почему TextBlock в DataTemplate отвечает на изменение Foreground в Trigger, но не на Button? Что мне нужно сделать, чтобы заставить кнопку уважать изменение переднего плана?
Что на земле вашей 'SC.ActionButtonHack Стиль для? – Sheridan
Для целей тестирования. У меня гораздо более сложный стиль, но я снимал его, чтобы сохранить этот пост коротким. –
Это кажется справедливым. – Sheridan