我尝试根据本地属性更改用户控件的样式。我已经尝试使用依赖关系属性并实现InotifyPropertyChanged,但没有任何可行。我是WPF的新手,所以我希望这很简单。感谢您的帮助。
样式位于用户控件的资源范围内.xAML文件的资源。如果您删除DataTrigger,则正确应用了效果。
<Style x:Name="Showing" TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsShowing}" Value="True">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect ShadowDepth="0"
Color="Orange"
Opacity="1"
BlurRadius="1"
Direction="100"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
当属性更改时,属性销量的事件正在增加。
Public Class ucLCGPulseWindowMini
Implements INotifyPropertyChanged
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Public Shadows Sub OnPropertyChanged(sender As Object, e As PropertyChangedEventArgs)
If Not e Is Nothing Then
RaiseEvent PropertyChanged(Me, e)
End If
End Sub
Private blnShowing As Boolean = False
Public Property IsShowing() As Boolean
Get
Return blnShowing
End Get
Set(ByVal value As Boolean)
blnShowing = value
OnPropertyChanged(Me, New PropertyChangedEventArgs("IsShowing"))
End Set
End Property
在运行时将ISSHOWN属性设置为True之后,我可以查看WPF Inspector中的边框元素,并看到触发器,但说IsShowing == True Value{x:Null}
。但是,如果我在WPF Inspector中查看用户控件的实例,则显示ISSHOWNing = true
在此处升级评论到答案...
1)将UserControl设置为自己的DataContext,只是在构造函数中进行this.DataContext=this;
。不过,除了开发/测试以外,您几乎永远都不想做此事,因为如果使用您的控件的人将数据台面设置为其他东西(即他们实际想显示的数据),则它将破坏您的所有绑定。<<<<<<<<<<<<<<<</p>
2)通常看起来像这样:
Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=your_namespace:ucLCGPulseWindowMini}, Path=IsShowing}"
3)如果您不想使用findancestor,则给用户控制一个名称并直接参考:
<UserControl
x:Class="Your.NameSpace.ucLCGPulseWindowMini"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="myControl"
d:DesignHeight="300" d:DesignWidth="300"
>
... Binding="{Binding ElementName=myControl, Path=IsShowing}" ...