图像样式不适用于工具栏的第一个按钮图像

时间:2014-07-04 13:35:44

标签: wpf image wpf-style

我在Window.Resources中有我的图像样式:

    <Style TargetType="{x:Type Image}">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.3" />
            </Trigger>
        </Style.Triggers>
    </Style>

我有一个工具栏:

        <ToolBarTray DockPanel.Dock="Top"  Background="Transparent">
            <ToolBar Band="0" BandIndex="0" x:Name="ToolbarCATIAAccess" Background="{DynamicResource linearGradBrushHellaTitanMenu}">
                <Button Name="ButtonInsertIntoProduct">
                    <Image x:Name="ImageInsertIntoProduct" Source="/HKBEStandardsFromPDMLibrary;component/Resources/InsertIntoCATIAProduct.png" 
                           ToolTip="insert files into active CATIA Product"/>
                </Button>
                <Button Name="ButtonCopyFilesToWIN">
                    <Image x:Name="ImageCopyFilesToWIN" Source="/HKBEStandardsFromPDMLibrary;component/Resources/CopyFilesToWIN.png" 
                           ToolTip="copy files to WIN folder"></Image>
                </Button>
            </ToolBar>
        </ToolBarTray>

此样式适用于整个窗口以及其他应用程序中的所有图像。 但它不适用于工具栏中的第一个图像,并且哪个首先出现并不重要,不透明度在第一个时没有设置。 如果我将隐藏(按钮)图像作为第一个图像添加到工具栏中,它适用于第一个可见的。

not working Style

...
                <Button Name="ButtonCopyFilesToWIN_" Visibility="Collapsed">
                    <Image x:Name="ImageCopyFilesToWIN_" Source="/HKBEStandardsFromPDMLibrary;component/Resources/CopyFilesToWIN.png" 
                           ToolTip="copy files to WIN folder"></Image>
                </Button>
                <Button Name="ButtonInsertIntoProduct">
                    <Image x:Name="ImageInsertIntoProduct" Source="/HKBEStandardsFromPDMLibrary;component/Resources/InsertIntoCATIAProduct.png" 
                           ToolTip="insert files into active CATIA Product"/>
                </Button>
                ...

working Style

有没有人知道这可能是什么问题,可以帮助我? 感谢

1 个答案:

答案 0 :(得分:1)

我已经将您的资源和工具栏代码片段放在简单的应用程序中,以证明是否正常工作,在我的示例中,它的行为与我期望的一样。我将不透明度更改为0,使图像消失时显而易见。

代码段中的图片是我的样本,只是还原到你的。通过在下面的代码段中的图像中显式设置IsEnabled属性,您可以查看是否正在应用样式。这里第二个图像消失(因为IsEnabled为假并且将样式的不透明度设置为0),如果在图像上交换IsEnabled属性,使第二个图像为true,第一个图像为false,则第一个图像消失。因此,样式将应用于下面显示的基本示例应用程序。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary1.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Grid>
    <ToolBarTray DockPanel.Dock="Top"  Background="Transparent">
        <ToolBar Band="0" BandIndex="0" x:Name="ToolbarCATIAAccess" >
            <Button Name="ButtonInsertIntoProduct">
                <Image x:Name="ImageInsertIntoProduct" Source="scroll1.png" IsEnabled="True"
                       ToolTip="insert files into active CATIA Product"/>
            </Button>
            <Button Name="ButtonCopyFilesToWIN">
                <Image x:Name="ImageCopyFilesToWIN" Source="scroll2.png" IsEnabled="False"
                       ToolTip="copy files to WIN folder"></Image>
            </Button>
        </ToolBar>
    </ToolBarTray>
</Grid>

示例app中只有其他代码(Dictionary1.xaml - 资源字典文件):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Image}">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0" />
        </Trigger>
    </Style.Triggers>
</Style>