我有在它的系統界面列表中的ListView控件,以及相應的「操作」按鈕,這將有助於我的用戶解決信息:ListView控件樣式觸發影響一個控制而不是另一個
如果消息是錯誤消息,我希望文本的前景和動作按鈕([更多...]部分)變爲紅色。正如你所看到的,這不是那樣做的。
我使用綁定到消息數據的嚴重性的Style.Trigger來設置Foreground。這適用於DataTemplate中的TextBlock,但無法影響該模板中的Button。我的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響應觸發器中的前臺更改,但不響應按鈕? 我需要做些什麼來讓按鈕尊重前景變化? ContentPresenter的
這到底是你的'SC.ActionButtonHack風格'爲了? – Sheridan
用於測試目的。我有更多的參與風格,但是爲了保持這篇文章的簡短,我正在剝離它。 –
這似乎夠公平。 – Sheridan