WPF RibbonButton:LargeImageSource和Label未通过DataTriggers更新

时间:2011-09-13 21:15:56

标签: wpf xaml wpf-controls ribbon

我对RibbonButton行为中的一种奇怪现象感到困惑。

当我在XAML中静态设置LargeImageSource和Label时,一切正常:

<ribbon:RibbonButton x:Name="ButtonArchive"
                     LargeImageSource="..\Assets\archive_insert.png"
                     Label="{Binding Path=ItemArchiveButton, 
                     Source={StaticResource Strings}}"/>

但是当我尝试通过DataTriggers修改这些属性时 - 似乎没有发生任何事情。 触发器确实有效;我可以看到其他属性 - 比如Command或IsEnabled - 在同一个触发器中设置OK。就是这些......

这是XAML:

<ribbon:RibbonButton x:Name="ButtonArchive"
    LargeImageSource="..\Assets\archive_insert.png"
    Label="{Binding Path=ItemArchiveButton, Source={StaticResource Strings}}">
    <ribbon:RibbonButton.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding ="{Binding ElementName=ItemsList, Path=SelectedItem.IsArchived}" Value="false">
                    <Setter Property="ribbon:RibbonButton.Command" Value="{Binding ArchiveItemCommand}" />
                    <Setter Property="ribbon:RibbonButton.LargeImageSource" Value="..\Assets\archive_insert.png" />
                    <Setter Property="ribbon:RibbonButton.Label" Value="{Binding Path=ItemArchiveButton, Source={StaticResource Strings}}" />
                </DataTrigger>
                <DataTrigger Binding ="{Binding ElementName=ItemsList, Path=SelectedItem.IsArchived}" Value="true">
                    <Setter Property="ribbon:RibbonButton.Command" Value="{Binding RestoreItemCommand}" />
                    <Setter Property="ribbon:RibbonButton.LargeImageSource" Value="..\Assets\archive_extract.png" />
                    <Setter Property="ribbon:RibbonButton.Label" Value="{Binding Path=ItemRestoreButton, Source={StaticResource Strings}}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ribbon:RibbonButton.Style>
</ribbon:RibbonButton>

设置命令在两种情况下均可正常工作,但其他两种属性无效......

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

我在MSDN论坛上问了同样的问题,我得到的答案真的解决了这个问题。

  

问题是您在按钮本身中设置LargeImageSource和Label的属性。当你这样做时,它会占用你的风格触发器。我建议在样式中使用setter来设置默认值,并在属性设置中删除按钮。