更改焦点后wpf图像源更改工作

时间:2016-08-28 11:41:03

标签: wpf image

我有带按钮的wpf应用程序,它应该反映两种状态 - 启用/禁用。 该按钮的图像为内容:

<Button Name="FindButton" Style="{StaticResource TextEditorToolbarButtonStyle}"
        Command="FindButtonCommand"
        Margin="2,0,10,0">

    <Image Name="FindSvgViewbox" Style="{StaticResource TextEditorToolbarIconStylePng}" 
                     Source="/Img/png/enabled/find.png"/>            
</Button>

因此,在某些情况下,按钮将被禁用,并且这些图像源将更改为:

 FindSvgViewbox.Source = new BitmapImage(new Uri(disabledImagePath));

这是有效的,但是图像实际上只有在我点击其他控件如textboxt或其他按钮后才会改变,因此存在某种延迟或延迟。 什么可能导致问题?

修改

这是按钮的样式:

 <Style x:Key="TextEditorToolbarButtonStyle" TargetType="{x:Type Button}">
            <Setter Property="Width" Value="30"></Setter>
            <Setter Property="Height" Value="30"></Setter>
            <Setter Property="BorderThickness" Value="0"></Setter>
            <Setter Property="Background" Value="#F1F1F1"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}"  BorderThickness="0">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#C5C5C5"/>
                </Trigger>
            </Style.Triggers>
        </Style>

图片来源在按钮的CanExecuteChanged处理程序中更改:

 FindButtonCommand = new RelayCommand(DoFind, o => FindCanExecute);
            FindButtonCommand .CanExecuteChanged += (sender, args) =>
            {
                AppUtils.ChangeIconSource(FindButton, FindSvgViewbox);
            };

1 个答案:

答案 0 :(得分:1)

如果图像源仅取决于按钮的启用/禁用状态(IsEnabled属性),则可以使用纯XAML控制图像源值。您的 TextEditorToolbarIconStylePng 样式应如下所示:

<Style x:Key="TextEditorToolbarIconStylePng" TargetType="Image">

    <Setter Property="Source" Value="/Img/png/enabled/find.png" />

    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Source" Value="/Img/png/enabled/findDisabled.png" />
        </Trigger>
    </Style.Triggers>

</Style>

请注意,应该从样式的Source而不是Setter元素直接分配初始Image值,当然您不应该从代码中编辑Source值。

另请注意,此样式使用图像的 IsEnabled属性,该属性默认继承自按钮的 IsEnabled属性(由命令控制),除非您手动编辑图片的属性。