Использовать / реализовывать диалог прогресса Mahapps.Metro для линейного перехода точек / анимации в диалоге дизайна материала (не MetroWindow) - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь использовать существующую диалоговую анимацию (линейный перевод / перемещение точек слева направо; я полагаю, что она используется в некоторых windows 10 диалоговых окнах, таких как подключение к Wi-Fi) из MahApps.Metro framework ShowProgressAsync(), без влияет на мой существующий код, что означает, что я не хочу использовать Metrowindow вместо window класса, к сожалению, он реализован внутри DLL. Есть ли способ использовать его в моем коде?

Я знаю, что можно реализовать его с нуля как анимацию, используя Storyboard, но потребуется время, чтобы достичь чего-то достаточно хорошего. Я попробовал несколько подходов, таких как приведение window к Metrowindow классу, и следовал MahApps.Metro: руководство по диалогам , но я сталкивался с ошибками компиляции, в большинстве случаев это:

> System.InvalidOperationException: Context is not registered. Consider
> using DialogParticipation.Register in XAML to bind in the DataContext.

Вот MWE:

TestWindow.xaml:

<Window x:Class="Wpf.Views.TestWindow" x:Name="win"
    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:Wpf.Views"
    mc:Ignorable="d"

    Title="TestWindow" Height="450" Width="800">
<Grid>
    <local:MyDialog/>
</Grid>
</Window>

MyDialog.xaml

<UserControl x:Class="MyWpf.Views.MyDialog" x:Name="self"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"

             mc:Ignorable="d"
             HorizontalAlignment="Center"
             VerticalAlignment="Center"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
<UserControl x:Class="Wpf.Views.MyDialog" x:Name="self"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
         MinWidth="300"  MinHeight="300" mc:Ignorable="d">
<Grid>
    <materialDesign:DialogHost Identifier="1" BorderBrush="{DynamicResource MaterialDesignDivider}" Height="130" 
    Width="{Binding ActualWidth, ElementName=self}" HorizontalAlignment="Center">
        <Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}" Width="130">
            Open
        </Button>
        <materialDesign:DialogHost.DialogContent>
            <StackPanel Orientation="Vertical" Height="130" Width="{Binding ActualWidth, ElementName=self}">
                    <TextBlock Text="Work in Progress" HorizontalAlignment="Center"/>
                    <Button Style="{StaticResource MaterialDesignFlatButton}"
      IsCancel="True" Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}" HorizontalAlignment="Center">
                        CANCEL
                    </Button>
                </StackPanel>
        </materialDesign:DialogHost.DialogContent>
    </materialDesign:DialogHost>
</Grid>
</UserControl>

enter image description here

1 Ответ

0 голосов
/ 24 апреля 2020

К сожалению, вам нужно MetroWindow, чтобы показать любые Dialog, поставляемые с MahApps. При этом MahApps имеет открытый исходный код, поэтому вы можете получить код и реализовать его самостоятельно. Также работает интеграция MaterialDesign внутри MetroWindow.

...