【发布时间】:2016-04-28 01:19:43
【问题描述】:
我正在尝试根据我的 ViewModel 中的值更改矩形的填充,但尽管尝试了我在网上找到的所有建议,但它仍然无法正常工作。
IsMouseOver 触发器工作正常,但 DataTrigger 被忽略,尽管我的 ViewModel 属性中始终存在 4 或 5。
谁能告诉我哪里可能出错了?
谢谢。
这是我的风格:
<Style x:Key="FavouriteRectangleStyle" TargetType="{x:Type Rectangle}">
<Setter Property="Opacity" Value="1"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Rectangle.Opacity" Value="0.5" />
</Trigger>
<DataTrigger Binding="{Binding Path=Theme}" Value="4">
<Setter Property="Rectangle.Fill" Value="{DynamicResource content__star__hex646464__shadow}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Theme}" Value="5">
<Setter Property="Rectangle.Fill" Value="{DynamicResource content__star__favorit__hexebebeb__shadow}"/>
</DataTrigger>
</Style.Triggers>
</Style>
编辑:所以我的绑定似乎不正确,因为我错误地假设 UserControl 的 DataContext 是我应该指导绑定的地方。
矩形位于 ListBox 的模板中,并且具有“项目”,因为它是 DataContext,因此通过更改“绑定”它现在可以工作了。
非常感谢您提供的所有帮助:
解决方案:
<Style x:Key="FavouriteRectangleStyle" TargetType="{x:Type Rectangle}">
<Setter Property="Opacity" Value="1"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Rectangle.Opacity" Value="0.5" />
</Trigger>
<DataTrigger Binding="{Binding DataContext.Theme,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=UserControl} }" Value="4">
<Setter Property="Rectangle.Fill"
Value="{DynamicResource content__star__hex646464__shadow}"/>
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.Theme,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=UserControl} }" Value="5">
<Setter Property="Rectangle.Fill"
Value="{DynamicResource content__star__favorit__hexebebeb__shadow}"/>
</DataTrigger>
</Style.Triggers>
</Style>
【问题讨论】:
-
您能否发布有关您将
FavouriteRectangleStyle应用到的矩形的 XAML? -
这个
应该是这个 并且它们都应该和你相似不需要矩形。因为您的样式以矩形为目标。 -
您的
<Rectangle>标签是否包含Fill属性?直接在标签中定义的属性,如<Rectangle Fill="White">,将始终优先于样式中的触发值,因此永远不会应用来自数据触发器的值。解决方案是在样式本身而不是标签中定义默认的 Fill 属性。例如,<Setter Property="Fill" Value="White" /> -
我的 Rectangle XAML 如下:
如果我删除“矩形”。作为 Setter 属性的一部分,IsMousOver 触发器根本不起作用。 -
我应该补充一点,这个 Rectangle 正在 ListBox 中使用,并且 ItemsSource 是父控件的 DataContext 的属性,而“Theme”是父控件的 DataContext 的属性。
标签: wpf xaml datatrigger