WPF控件和窗口问题

时间:2017-11-13 06:59:41

标签: c# wpf xaml wpf-controls

嘿,这里所有人都是关于WPF和控件的noob问题。

我下载了名为 FluidKit 的项目,该项目附带了一系列 3D图像效果以及图像效果的示例总的来说。

我遇到的问题是我只想要所有这些 1类型效果,但我不确定如何制作新项目并复制/粘贴 FluidKit < / strong>我的新项目的代码只是为了达到所需的效果。我需要能够在我的窗口中重现这种情况,而不是像我现在那样只复制一次。

代码如下:

  

TransitionTester.xaml

其中有一些设置如:

  

立方体(从左到右)

     

立方体(从右到左&gt;

     

立方体(从上到下)

     

立方体(从下到上)

     

滑动(从左到右)

     

滑动(从右到左)

     

翻转(从左到右)

     

翻转(从右到左)

TransitionTester.xaml 看起来是 UserControl

所以我创建了一个新的WPF项目,现在我有以下几种形式:

  

MainWindow.xaml

     

TransitionTester.xaml

当然我将引用替换为 fluidkit.dll

将从fluidKit项目的代码复制/粘贴到我的新项目后,我最后只有2个错误,这对我来说是惊人的!

错误是:

  

错误CS1061&#39; MainWindow&#39;不包含&#39; SwitchImage&#39;的定义没有扩展方法&#39; SwitchImage&#39;接受类型&#39; MainWindow&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

     

错误资源&#34; SlideTransition&#34;无法解决。

我的MainWindow.xaml代码如下所示:

<Window x:Class="flipwindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:flipwindow"        
        xmlns:Controls="clr-namespace:FluidKit.Controls;assembly=FluidKit"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Controls:TransitionPresenter x:Name="_transContainer"
                                      MouseLeftButtonDown="SwitchImage"
                                      RestDuration="0:0:3"
                                      IsLooped="True"
                                      Transition="{StaticResource SlideTransition}">
            <Image x:Name="_image1"
                   Source="Images/img1.png"
                   Stretch="Fill" />
            <Image x:Name="_image2"
                   Source="Images/img2.png"
                   Stretch="Fill" />
            <Image x:Name="_image3"
                   Source="Images/img3.png"
                   Stretch="Fill" />
        </Controls:TransitionPresenter>
    </Grid>
</Window>

该页面背后的代码如下所示:

namespace flipwindow
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private string _backItem = "_image1";
        private string _frontItem = "_image2";

        public MainWindow()
        {
            InitializeComponent();
            Loaded += TransitionTester_Loaded;
            //PlayCube();
        }

        private void TransitionTester_Loaded(object sender, RoutedEventArgs e)
        {
            _transContainer.TransitionCompleted += _transContainer_TransitionCompleted;
        }

        private void _transContainer_TransitionCompleted(object sender, EventArgs e)
        {
            SwapFrontAndBack();
        }

        private void SwapFrontAndBack()
        {
            string temp = _frontItem;
            _frontItem = _backItem;
            _backItem = temp;
        }

        private void PlayCube()
        {
            CubeTransition transition = Resources["CubeTransition"] as CubeTransition;
            //transition.Rotation = Direction.LeftToRight;
            //transition.Rotation = Direction.RightToLeft;
            //transition.Rotation = Direction.TopToBottom;
            transition.Rotation = Direction.BottomToTop;

            _transContainer.Transition = transition;
            _transContainer.ApplyTransition(_frontItem, _backItem);
        }
    }
}

上面列出的第二个错误显示在这一行:

  

Transition =&#34; {StaticResource SlideTransition}&#34;&gt;

虽然我不确定第一个错误以及它正在寻找什么以便纠正错误。它似乎可能与 UserControl.Resources 有关,我似乎无法添加到我的窗口中:

<UserControl.Resources>
    <Controls:SlideTransition x:Key="SlideTransition" />
    <Controls:CubeTransition x:Key="CubeTransition" Rotation="BottomToTop" />
    <Controls:FlipTransition x:Key="FlipTransition" />
</UserControl.Resources>

布局如下所示:

enter image description here

我的 MainWindow.xaml设计看起来也不错:

enter image description here

将其与原始FluidKit窗口进行比较时:

enter image description here

所以帮助我解决这两个错误的任何帮助都会很棒!

更新1 enter image description here

1 个答案:

答案 0 :(得分:1)

首先:MouseLeftButtonDown标记引用代码中的回调函数,当然无法找到。因此,只需将SwitchImage函数插入TransitionTester.xaml.cs中FluidKit原始代码中的MainWindow类代码,该MainWindow.xaml.cs类代码应该在MainWindow.xaml文件旁边创建{1}}文件。 (可能为了测试目的而保持空白)

第二:是的,您必须将<UserControl.Resources> xml代码从原始xaml-File复制到您的文件中。但是您必须将标记<UserControl.Resources>替换为<MainWindow.Resources>,因为您的周围标记为<MainWindow>。 (稍后在代码中引用的名为SliceTransition的资源在此块中定义)