С# WPF — TransitioningContentControl с App.content

Работаю с темой MahApps (Metro Dark) Посмотрел анимации этой темы.

Я зашел в тупик: действительно я создал систему для переключения между разными UserControl, то есть у меня есть только одно окно и нажимая на разные кнопки, у меня появляется тот или иной UserControl. Но сейчас я с этим системным переключателем, у меня нет анимации (только запуск приложения).

Как я могу сделать анимацию для каждого изменения в UserControl (тема Keeping Metro)?

Кто-нибудь спросит меня: используйте TransitioningContentControl

Но я сделал свой переключатель следующим образом:

class Switcher
{
    public static UserControl WClient;
    public static UserControl WHome;
    public static UserControl WDataBase;

    public Switcher()
    {
        WClient = new Windows.Client();
        WHome = new Windows.Home();
        WDataBase = new Windows.DataBase();
    }

    public static void currentWindow(UserControl window, string color)
    {

        Window curApp = Application.Current.MainWindow;
        curApp.Content = window;

        if (window == WClient)
        {
            curApp.Title = "CLIENT - INFO-TOOLS - BY NAOGRAFIX";
        }
        else if (window == WDataBase)
        {
            curApp.Title = "DATABASE - INFO-TOOLS - BY NAOGRAFIX";
        }
        else
        {
            curApp.Title = "HOME - INFO-TOOLS - BY NAOGRAFIX";
        }

        currentColor(color); 
  }

}

Теперь, когда я нажимаю кнопку (для переключения userControl), я использую это:

private void BtnDataBase_Click(object sender, RoutedEventArgs e)
{
     var color = "Red";

     if (DataBase.isConnected) { color = "Green"; }
     Switcher.currentWindow(Switcher.WDataBase, color);
}

Я использую CONTENT, я не знаю, могу ли я использовать TransitioningContentControl

Помощь :)

Нао*


person Community    schedule 26.09.2014    source источник


Ответы (2)


Вам нужно использовать управление переходом контента, как вы сказали. Вы можете добавить это как прямое содержимое окна, а затем получить к нему доступ по имени из главного окна и вместо этого изменить его содержимое.

Xaml

<metro:TransitioningContentControl x:Name="tContent"/>

C#

((ContentControl)curApp.FindName("tContent")).Content = window;

Вам понадобится определение пространства имен xml

xmlns:metro="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"

и вы можете изменить переход, используя свойство Transition в TransitioningContentControl

person ndonohoe    schedule 26.09.2014

WPF XAML ниже показывает использование MahApps.Metro TransitioningContentControl.

Нажмите на список содержимого, чтобы переключить содержимое.

Выберите эффект перехода в списке «Переход», затем измените выбранное содержимое, чтобы увидеть эффект.

<Window x:Class="WpfMahApp.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:mah="http://metro.mahapps.com/winfx/xaml/controls"
        mc:Ignorable="d"
        Title="MainWindow" Height="600" Width="800">
    <Window.Resources>
        <TextBlock x:Key="Content1" Width="400" Height="200" Text="Content 1: TextBox" Background="Aqua" />
        <Canvas x:Key="Content2" Width="200" Height="400" Background="DarkOrange">
            <Ellipse Fill="YellowGreen" Stroke="Black"  Width="100" Height="200" />
            <Label Content="Content2: Canvas" />
        </Canvas>
        <Border x:Key="Content3" Width="100" Height="100" Background="Yellow" BorderBrush="Blue" BorderThickness="2" CornerRadius="4">
            <TextBlock Text="Content3: Border" />
        </Border>
    </Window.Resources>
    <StackPanel Orientation="Horizontal">
        <StackPanel Orientation="Vertical" >
            <CheckBox Margin="4" Content="Is Transitioning" IsChecked="{Binding ElementName=TransitioningContentControl,Path=IsTransitioning , Mode=OneWay}" />
            <StackPanel Orientation="Vertical" Margin="8">
                <TextBlock Text="Content" FontWeight="Bold"/>
                <ListBox Name="ContentSelection" HorizontalAlignment="Left">
                    <ListBoxItem Content="Content 1" Tag="{StaticResource Content1}" />
                    <ListBoxItem Content="Content 2" Tag="{StaticResource Content2}" />
                    <ListBoxItem Content="Content 3" Tag="{StaticResource Content3}" />
                </ListBox>
            </StackPanel>
            <StackPanel Orientation="Vertical" Margin="8">
                <TextBlock Text="Transition" FontWeight="Bold" />
                <ListBox Name="Transition" HorizontalAlignment="Left">
                    <ListBoxItem Content="Default" Tag="{x:Static mah:TransitionType.Default}"/>
                    <ListBoxItem Content="Normal" Tag="{x:Static mah:TransitionType.Normal}"/>
                    <ListBoxItem Content="Up" Tag="{x:Static mah:TransitionType.Up}"/>
                    <ListBoxItem Content="Down" Tag="{x:Static mah:TransitionType.Down}"/>
                    <ListBoxItem Content="Left" Tag="{x:Static mah:TransitionType.Left}" />
                    <ListBoxItem Content="Right" Tag="{x:Static mah:TransitionType.Right}"/>
                    <ListBoxItem Content="LeftReplace" Tag="{x:Static mah:TransitionType.LeftReplace}"/>
                    <ListBoxItem Content="RightReplace" Tag="{x:Static mah:TransitionType.RightReplace}"/>
                </ListBox>
            </StackPanel>
        </StackPanel>
        <mah:TransitioningContentControl Margin="8" 
            Name="TransitioningContentControl"
            Background="Beige" BorderBrush="Black" BorderThickness="1"
            Content="{Binding ElementName=ContentSelection, Path=SelectedValue.Tag}" 
            Transition="{Binding ElementName=Transition, Path=SelectedValue.Tag}" />
    </StackPanel>
</Window>

Демонстрация MAHApps

person Edward    schedule 25.02.2019
comment
@ djack109: код cs автоматически генерируется для вас Visual Studio, когда вы делаете Добавить › Новый элемент › Visual C# › WPF › Окно (WPF). Затем вы можете вставить код XAML из ответа. Вам также необходимо добавить ссылку на пакет nuget MahApps.Metro. - person Edward; 03.12.2019
comment
Ах да, у вас нет С# в коде программной части? Ах да, я вижу, что происходит :) - person djack109; 03.12.2019