画像切り替え

11024 ワード

いろいろな画像の切り替え効果がよく見られるので、使うところが多いと思います.整理する必要があります.後で調べるために、プログラムは主にTransitionalsを使います.dllは切り替え効果を実現するために、
効果は次のとおりです.
图片切换特过渡效果
xamlフロントコード:
<Window x:Class="SwitchPicture.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

<!--              -->         

xmlns:transitionalsControls="clr-namespace:Transitionals.Controls;assembly=Transitionals"

        Title="MainWindow" Height="388" Width="516" Name="win" >

    <Grid>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="7*"></ColumnDefinition>

            <ColumnDefinition Width="3*"></ColumnDefinition>

        </Grid.ColumnDefinitions>

        <Canvas Name="canv" Grid.Column="0" Grid.Row="0" Background="AliceBlue">

 <!--     TransitionElement       --> 

            <transitionalsControls:TransitionElement x:Name="TransitionBox" Transition="{Binding}" Width="350" Height="350"></transitionalsControls:TransitionElement>

        </Canvas>

       

        <Button Grid.Column="1" Grid.Row="0" Height="30" Content="    " Click="Button_Click"></Button>

       

    </Grid>

</Window>

バックグラウンドコードでは、2枚の画像を設定して切り替えます.
  /// <summary>

    /// MainWindow.xaml      

    /// </summary>

    public partial class MainWindow : Window

    {

        private ObservableCollection<Type> transitionTypes = new ObservableCollection<Type>();

        //private ICollectionView view;

        Image img1 = new Image();

        Image img2 = new Image();

        Canvas canv1 = new Canvas();

        Canvas canv2 = new Canvas();

        int m_nCount = 0;

        int m_nIndex = 0;

        private ObjectDataProvider TransitionDS = new ObjectDataProvider();





        public MainWindow()

        {

            InitializeComponent();



            this.DataContext = TransitionDS;



            //      

            img1.Width = 350;

            img1.Height = 350;

            img2.Width = 350;

            img2.Height = 350;

            img1.Source = new BitmapImage(new Uri(System.IO.Path.GetFullPath("1.jpg")));

            img2.Source = new BitmapImage(new Uri(System.IO.Path.GetFullPath("2.jpg")));



            canv1.Children.Add(img1);

            canv2.Children.Add(img2);

            LoadTransitions(Assembly.GetAssembly(typeof(Transition)));

        }



        public void LoadTransitions(Assembly assembly)

        {

            foreach (Type type in assembly.GetTypes())

            {

                // Must not already exist

                if (transitionTypes.Contains(type)) { continue; }



                // Must not be abstract.

                if ((typeof(Transition).IsAssignableFrom(type)) && (!type.IsAbstract))

                {

                    transitionTypes.Add(type);

                }

            }

        }



        private void SwapCell()

        {



            if (m_nCount++ % 2 == 0)

            {

                TransitionBox.Content = canv1;

            }

            else

            {

                TransitionBox.Content = canv2;

            }

        }



        private void Button_Click(object sender, RoutedEventArgs e)

        {

            m_nIndex++;

            if (m_nIndex >= transitionTypes.Count)

            {

                m_nIndex = 0;

            }

            Type transitionType = transitionTypes[m_nIndex];

            // Create the instance

            Transition transition = (Transition)Activator.CreateInstance(transitionType);



            // Bind

            TransitionDS.ObjectInstance = transition;

            //App.CurrentApp.PropertyWindow.SelectedObject = transition;



            SwapCell();

        }

    }

 
ソースのダウンロード