在 ResourceDictionary 中使用 DataTrigger 定义样式,但在视图中指定 DataTrigger 绑定路径
Defining a Style with a DataTrigger in ResourceDictionary but specify the DataTrigger binding path in the view
我想在 ResourceDictionary
中使用具有 DataTrigger
.
的样式定义控件的一般外观
是否可以在视图中指定DataTrigger
绑定路径?
如果没有,是否有一些巧妙的替代方法可以实现我的目标?
我的目标是重用图形定义(包括触发器),但 link 每次使用触发器时都指向不同的数据源。
示例样式:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Rectangle" x:Key="LedBehavior">
<Setter Property="Fill" Value="LightGray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding **DefineThisPathInTheView**}" Value="True">
<Setter Property="Fill" Value="DarkGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
在视图中我希望使用这种样式有点像这样:
<Rectangle Width="50" Height="50"
Style="{StaticResource LedBehavior}"
DataTriggerBindingPath="**PropertyInViewModel**"/>
谢谢!
解决方案看起来非常简洁而且不太难。
我必须将(在本例中)我的 Rectangle
的 DataContext
绑定到我想要的 属性。然后我必须以我的风格将触发器绑定到 DataContext
.
下面的工作示例。
示例样式:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Rectangle" x:Key="LedBehavior">
<Setter Property="Fill" Value="LightGray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="True">
<Setter Property="Fill" Value="DarkGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
示例(部分)视图:
<Rectangle Width="50" Height="50"
Style="{StaticResource LedBehavior}"
DataContext="{Binding PropertyInViewModel}"/>
希望对大家有所帮助!
如果您不想使用 DataContext,您可以使用附加属性并绑定到它。
我想在 ResourceDictionary
中使用具有 DataTrigger
.
是否可以在视图中指定DataTrigger
绑定路径?
如果没有,是否有一些巧妙的替代方法可以实现我的目标?
我的目标是重用图形定义(包括触发器),但 link 每次使用触发器时都指向不同的数据源。
示例样式:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Rectangle" x:Key="LedBehavior">
<Setter Property="Fill" Value="LightGray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding **DefineThisPathInTheView**}" Value="True">
<Setter Property="Fill" Value="DarkGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
在视图中我希望使用这种样式有点像这样:
<Rectangle Width="50" Height="50"
Style="{StaticResource LedBehavior}"
DataTriggerBindingPath="**PropertyInViewModel**"/>
谢谢!
解决方案看起来非常简洁而且不太难。
我必须将(在本例中)我的 Rectangle
的 DataContext
绑定到我想要的 属性。然后我必须以我的风格将触发器绑定到 DataContext
.
下面的工作示例。
示例样式:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Rectangle" x:Key="LedBehavior">
<Setter Property="Fill" Value="LightGray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="True">
<Setter Property="Fill" Value="DarkGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
示例(部分)视图:
<Rectangle Width="50" Height="50"
Style="{StaticResource LedBehavior}"
DataContext="{Binding PropertyInViewModel}"/>
希望对大家有所帮助!
如果您不想使用 DataContext,您可以使用附加属性并绑定到它。