画像切り替え
11024 ワード
いろいろな画像の切り替え効果がよく見られるので、使うところが多いと思います.整理する必要があります.後で調べるために、プログラムは主にTransitionalsを使います.dllは切り替え効果を実現するために、
効果は次のとおりです.
xamlフロントコード:
バックグラウンドコードでは、2枚の画像を設定して切り替えます.
ソースのダウンロード
効果は次のとおりです.

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();
}
}
ソースのダウンロード