Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 功能区按钮上的图像过渡动画_Wpf_Ribbon - Fatal编程技术网

Wpf 功能区按钮上的图像过渡动画

Wpf 功能区按钮上的图像过渡动画,wpf,ribbon,Wpf,Ribbon,如何创建在两个图像之间切换的WPF功能区按钮,以及图像之间的动画“擦除”转换?我无法将两个图像都放置在按钮内的网格内,并按建议依次设置每个图像的不透明度,因为我无法直接设置功能区的内容,只能设置大图像源/小图像源和标签属性 更新 我尝试了BorisB的建议和上面链接中的动画,但是现在功能区按钮中没有显示图像。删除动画、不透明度遮罩和多个图像,保留以下代码也不会显示图像 <RibbonToggleButton Label="Dashboard" Name="btnDashboard" IsC

如何创建在两个图像之间切换的WPF功能区按钮,以及图像之间的动画“擦除”转换?我无法将两个图像都放置在按钮内的网格内,并按建议依次设置每个图像的不透明度,因为我无法直接设置功能区的内容,只能设置
大图像源
/
小图像源
标签
属性

更新

我尝试了BorisB的建议和上面链接中的动画,但是现在功能区按钮中没有显示图像。删除动画、不透明度遮罩和多个图像,保留以下代码也不会显示图像

<RibbonToggleButton Label="Dashboard" Name="btnDashboard" IsChecked="True">
  <RibbonToggleButton.LargeImageSource>
    <DrawingImage>
      <DrawingImage.Drawing>
        <DrawingGroup>
          <ImageDrawing ImageSource="/Icons/Dashboard.png" />
        </DrawingGroup>
      </DrawingImage.Drawing>
    </DrawingImage>
  </RibbonToggleButton.LargeImageSource>
</RibbonToggleButton>

您可以使用
绘图图像
作为图像源。然后可以将
DrawingGroup
指定为
DrawingImage.Drawing
。该绘图组可以包含两个用自己的
DrawingGroup
s包装的
ImageDrawing
s,因此您可以从链接应用该方法:

<Grid>
    <Ribbon>
        <RibbonTab x:Name="HomeTab" Header="Home">
            <RibbonGroup x:Name="Group1" Header="Group1">
                <RibbonButton x:Name="Button1" Label="Button1">
                    <RibbonButton.LargeImageSource>
                        <DrawingImage>
                            <DrawingImage.Drawing>
                                <DrawingGroup>
                                    <DrawingGroup>
                                        <ImageDrawing Rect="0, 0, 32, 32" ImageSource=ImageOne.png"/>
                                    </DrawingGroup>
                                    <DrawingGroup>
                                        <ImageDrawing Rect="0, 0, 32, 32" ImageSource="ImageTwo.png"/>
                                        <DrawingGroup.OpacityMask>
                                            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                <GradientStop Offset="0" Color="Black" x:Name="BlackStop"/>
                                                <GradientStop Offset="0" Color="Transparent" x:Name="TransparentStop"/>
                                            </LinearGradientBrush>
                                        </DrawingGroup.OpacityMask>
                                    </DrawingGroup>
                                </DrawingGroup>
                            </DrawingImage.Drawing>
                        </DrawingImage>
                    </RibbonButton.LargeImageSource>
                </RibbonButton>
            </RibbonGroup>
        </RibbonTab>
    </Ribbon>
</Grid>
<Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="TransparentStop" 
                         Storyboard.TargetProperty="Offset" By="1"  Duration="0:0:2"   />
                    <DoubleAnimation Storyboard.TargetName="BlackStop" 
                         Storyboard.TargetProperty="Offset" By="1" Duration="0:0:2" 
                         BeginTime="0:0:0.05" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Window.Triggers>


您可以使用
DrawingImage
作为图像源。然后可以将
DrawingGroup
指定为
DrawingImage.Drawing
。该绘图组可以包含两个用自己的
DrawingGroup
s包装的
ImageDrawing
s,因此您可以从链接应用该方法:

<Grid>
    <Ribbon>
        <RibbonTab x:Name="HomeTab" Header="Home">
            <RibbonGroup x:Name="Group1" Header="Group1">
                <RibbonButton x:Name="Button1" Label="Button1">
                    <RibbonButton.LargeImageSource>
                        <DrawingImage>
                            <DrawingImage.Drawing>
                                <DrawingGroup>
                                    <DrawingGroup>
                                        <ImageDrawing Rect="0, 0, 32, 32" ImageSource=ImageOne.png"/>
                                    </DrawingGroup>
                                    <DrawingGroup>
                                        <ImageDrawing Rect="0, 0, 32, 32" ImageSource="ImageTwo.png"/>
                                        <DrawingGroup.OpacityMask>
                                            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                <GradientStop Offset="0" Color="Black" x:Name="BlackStop"/>
                                                <GradientStop Offset="0" Color="Transparent" x:Name="TransparentStop"/>
                                            </LinearGradientBrush>
                                        </DrawingGroup.OpacityMask>
                                    </DrawingGroup>
                                </DrawingGroup>
                            </DrawingImage.Drawing>
                        </DrawingImage>
                    </RibbonButton.LargeImageSource>
                </RibbonButton>
            </RibbonGroup>
        </RibbonTab>
    </Ribbon>
</Grid>
<Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="TransparentStop" 
                         Storyboard.TargetProperty="Offset" By="1"  Duration="0:0:2"   />
                    <DoubleAnimation Storyboard.TargetName="BlackStop" 
                         Storyboard.TargetProperty="Offset" By="1" Duration="0:0:2" 
                         BeginTime="0:0:0.05" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Window.Triggers>


你用的是什么缎带?LargeItemSource/SmallItemSource属性的类型是什么?@BorisB
System.Windows.Media.ImageSource
,使用.NET 4.5中的内置功能区,可以尝试将DrawingImage指定为源,然后将DrawingGroup指定为DrawingImage.Drawing。该图形组可以包含两个ImageDrawing,以便您可以从链接应用该方法。@BorisB。谢谢,但是我尝试了这个,结果在我编辑的问题中描述。请提供ImageDrawing的Rect属性:
。它会显示图像,但对您没有帮助,因为您提供的链接中的代码依赖于OpacityMask实现效果,而OpacityMask只能应用于UIElement或视觉,而不能应用于图形。您使用的功能区是什么?LargeItemSource/SmallItemSource属性的类型是什么?@BorisB
System.Windows.Media.ImageSource
,使用.NET 4.5中的内置功能区,可以尝试将DrawingImage指定为源,然后将DrawingGroup指定为DrawingImage.Drawing。该图形组可以包含两个ImageDrawing,以便您可以从链接应用该方法。@BorisB。谢谢,但是我尝试了这个,结果在我编辑的问题中描述。请提供ImageDrawing的Rect属性:
。它会显示图像,但对您没有帮助,因为您提供的链接中的代码依赖于OpacityMask实现效果,而OpacityMask只能应用于UIElement或视觉,而不能应用于看起来的图形。一个次要点,但第一个
ImageDrawing
不需要包装在
DrawingGroup
中。次要点,但是第一个
ImageDrawing
不需要包装在
DrawingGroup
中。