这是我的第一个wcf&我遇到了一些基本的XAML概念。
“PriorityStyle”中的DataTrigger / Binding无法正常工作。我想这是因为背景问题,但环顾四周,我无法找到答案。
<UserControl … >
<UserControl.Resources>
<Style x:Key="PriorityStyle" TargetType="TextBlock" >
<Style.Triggers>
<DataTrigger Binding="{Binding Priority}" Value="High">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="ItemTemplate">
<StackPanel Margin="3">
...
<DockPanel>
<TextBlock Name="Priority" Text="{Binding Priority}" Foreground ="#014f7c" Style="{StaticResource PriorityStyle}"/>
</DockPanel>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="SelectedTemplate">
...
</DataTemplate>
<Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle">
<Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}" />
</Trigger>
<!-- DataBinding work in this Context, But in Style I cannot use a TargetName -->
<DataTrigger Binding="{Binding Priority}" Value="High">
<Setter Property="Background" Value="DarkOrange"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<ListBox x:Name="ListBox" ItemContainerStyle="{StaticResource ContainerStyle}" />
答案 0 :(得分:1)
正如@HighCore所说,不确定您为ListBox
设置来源的位置,但如果您的约束适用于[{1}}的样式,则可以尝试解决方法
ListBoxItem
但是您<Style x:Key="PriorityStyle" TargetType="TextBlock" >
<Setter Property="Foreground"
Value="Black" />
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.Priority, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="High">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
的{{1}}属性也Priority
属Text
TextBlock
。所以你也可以这样做:
PriorityStyle
这样你甚至不需要遍历元素树的绑定
答案 1 :(得分:1)
我发现了问题的真正问题。事实上,这不是一个具有约束力的问题,而是一个风格问题。
我没有将它包含在原始XAML中,因为我做了一些不正确的清洁以使其更清晰。我在Textblock中包含了一个“Foreground”属性,最后一个属性确实覆盖了我的style属性。删除它并在样式设置器中包含“默认前景”值就是答案。初学者错了。
所以,向Viv表示赞赏,指出正确的方向&amp;对于漂亮的“RelativeSource”示例。对于我的坏问题再次感到抱歉,这是从这里学到的一课。
<Style x:Key="PriorityStyle" TargetType="TextBlock" >
<Setter Property="Foreground" Value="#6c6d6f" />
<Style.Triggers>
<DataTrigger Binding="{Binding Priority}" Value="Critical">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
<TextBlock Name="Summary" Text="{Binding _Summary}" Style="{StaticResource PriorityStyle}" />