WPF图像控制:一旦在代码中修改了Source,触发器就会停止工作
本文关键字:Source 触发器 停止工作 修改 控制 图像 代码 WPF | 更新日期: 2023-09-27 18:28:01
在更改WPF Image控件的"Source"属性时遇到一些问题。
我定义了三个图像源:
<Window.Resources>
<BitmapImage x:Key="eyeSelImage" UriSource="/Images/eye-Sel.png" />
<BitmapImage x:Key="eyeSelHlImage" UriSource="/Images/eye-SelHl.png" />
<BitmapImage x:Key="eyeDisabled" UriSource="/Images/eye-Disabled.png" />
</Window.Resources>
我的图像定义如下:
<Image x:Name="testImage" Width="100" Height="100">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="{StaticResource eyeSelImage}"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Source" Value="{StaticResource eyeDisabled}"/>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
它按预期工作。如果禁用图像控制,则图像会发生更改。一旦启用,它就会变回。我通过制作一个按钮(btn_DisableEnable)来测试这一点,当单击该按钮时,会切换"testImage"的"IsEnabled"属性。
然而,一旦我在代码中更改"testImage"图像控件的"Source","IsEnabled"触发器似乎就停止工作了。我做了另一个按钮,在它的"点击"事件处理程序中,我做了以下操作:
BitmapImage tempImage = new BitmapImage();
tempImage.BeginInit();
tempImage.UriSource = new Uri("pack://application:,,,/testApp1;component/Images/eye-SelHl.png");
tempImage.EndInit();
testImage.Source = tempImage;
按下此按钮后,图像的来源将正确更改为"eyeSelHlImage"资源。但是,当单击"btn_DisableEnable"时,图像不再更改为其禁用的表示形式并返回。
可能是什么问题?我们非常感谢所有的帮助。
谢谢!
由于依赖属性可以通过不同的机制(触发器、样式、主题、继承等)进行设置,因此定义了一个"设置"优先级列表。
你可以在这里找到它。
正如您所看到的,局部值(即,如果您使用代码或XAML或使用SetValue方法直接设置属性)的优先级高于样式或触发器。
因此,通过代码设置Source
属性优先于触发器可以设置的值。
这就是为什么在调用代码后,触发器不再工作的原因。