我的UserControl
有两个自定义属性CustomA
和CustomB
。我想在Label
内的UserControl
控件中使用DataTriggers来更改这些自定义属性的Value
。
在我的示例中,我似乎或者不知道如何访问Setter中的CustomB
属性,以便我可以更改它{{1当Value
Value
属性在DataTrigger中发生变化时。我认为CustomA
属性的绑定是正确的,但我不知道如何使用Setter来访问CustomA
。
总结一下,我需要知道如何从控件的Style DataTriggers中访问属于我的CustomB
的自定义属性 - 在本例中为UserControl
- 以及改变他们的价值观
UCLabel.xaml - UserControl
Label
UCLabel.xaml.vb - 背后的代码
<UserControl x:Class="UCLabel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TestProgram"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="100">
<Label Name="lbl">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=CustomA}" Value="True">
<Setter Property="CustomB" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</UserControl>
答案 0 :(得分:0)
在Style中使用Setter
时,意味着更改当前控件的属性(在您的情况下,它是Label),并且不能更改任何其他控件的属性。但是,您可以通过Behaviors
实现目标。
首先,您需要将以下程序集引用添加到项目中:
System.Windows.Interactivity
Microsoft.Expression.Interactions
然后使用以下代码:
<UserControl
x:Name="uc"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<Label>
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding ProA, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" Value="True">
<ei:ChangePropertyAction
PropertyName="ProB"
TargetName="uc"
Value="True" />
</ei:DataTrigger>
</i:Interaction.Triggers>
</Label>