WPF 一个控件根据另一个控件的某种状态的改变从而改变自身某种状态
前提,这里根据 Image 控件 Source 属性为 null 时,让 Label 控件可见,不为 null 时, Label 控件不可见为例子展示,代码如下:
<Canvas><Image Width="100" Height="100" Source="{Binding LeftMatL}" Stretch="Fill"></Image><Label Visibility="Visible" Width="100" Height="100" Content="待检测"></Label>
</Canvas>
方法一:控件切换位置
让 Image 控件和 Label 控件在 xaml 中互换,这样当 Image 有图片时就会将 Label 控件给覆盖,从而达到让 Label 控件不可见的效果。
<Canvas><Label Visibility="Visible" Width="100" Height="100" Content="待检测"></Label><Image Width="100" Height="100" Source="{Binding LeftMatL}" Stretch="Fill"></Image>
</Canvas>
但是如果图片是透明的,用这种方法就不行
方法二:根据触发来修改状态
使用 DataTrigger,根据值的变换时,来触发对应的操作,从而达到对应的效果。
<Canvas><Image x:Name="img" Width="100" Height="100" Source="{Binding LeftMatL}" Stretch="Fill"></Image><Label Name="label" Visibility="Visible" Width="100" Height="100" Content="待检测"><Label.Template><!--重写 label 控件--><ControlTemplate TargetType="Label" ><!--起名为 tb, 并且让其默认不可见,然后设置触发器让其满足 Image 控件某个效果时,才让其可见--><TextBlock x:Name="tb" Text="{TemplateBinding Content}" Visibility="Collapsed" Foreground="Red" /><ControlTemplate.Triggers><!--使用 DataTrigger 当 Image 控件某个书信给的值变化时或达到某种结果时,触发--><DataTrigger Binding="{Binding ElementName=img,Path=Source}" Value="{x:Null}" ><!--指定修改 tb 的可见状态--><Setter Property="Visibility" TargetName="tb" Value="Visible" /></DataTrigger></ControlTemplate.Triggers></ControlTemplate></Label.Template></Label>
</Canvas>
Image 控件有图时
Image 控件无图时
方法三:后台根据 Image Source 属性是否为空修改 Label Visibility 状态
不做赘述