如何在 uwp 中使用带有内容对话控件的 VisualStateManager

How to use VisualStateManager with content Dialogue control in uwp

有什么方法可以在 uwp 应用程序中使用带有内容对话控件的 visualStateManager。

将你所有的popUp控件放到控件中如下:

`<Grid Background="White">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState>
                    <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="1000" />
                </VisualState.StateTriggers>
                <VisualState.Setters>

                </VisualState.Setters>
                </VisualState>

                <VisualState>
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="750" />
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="BlueRect.Visibility" Value="Visible" />
                        <Setter Target="RedRect.Visibility" Value="Collapsed" />
                    </VisualState.Setters>
                </VisualState>

                <VisualState>
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="500" />
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="BlueRect.Visibility" Value="Collapsed" />
                        <Setter Target="RedRect.Visibility" Value="Visible" />
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <StackPanel>
            <Rectangle x:Name="BlueRect" Width="50" Height="50" Fill="Blue" />
            <Rectangle x:Name="RedRect" Width="50" Height="50" Fill="Red" />
            <Button Content="Change Style" Width="500" Height="30" HorizontalAlignment="Center" VerticalAlignment="Bottom" Click="Button_Click" />
        </StackPanel>
    </Grid>`

将用户控件的事件传递给contentdialog,如果有:

`public sealed partial class MyUserControl1 : UserControl
    {
        public delegate void MyEventHandler(object source, EventArgs e);

        public static event MyEventHandler OnNavigateParentReady;

        public MyUserControl1()
        {
            this.InitializeComponent();            
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            OnNavigateParentReady(sender,null);
        }
    }`

创建 contentDialog 控件并使用创建的用户控件,如下所示:

` <Grid >
        <local:MyUserControl1 />
    </Grid>`

现在处理contentDialog上用户控件的传输事件如下:

`public sealed partial class ContentDialog1 : ContentDialog
    {
        public ContentDialog1()
        {
            this.InitializeComponent();
            MyUserControl1.OnNavigateParentReady += test;
        }

        private void test(object source, EventArgs e)
        {
            Button bt = (Button)source;
            if (bt.IsEnabled == true)
            {
                this.Hide();
            }
        }
    }`

现在只需从您想要的地方调用您的 popUp(contentDialog) to.I 调用按钮单击事件,如图所示:

` ContentDialog1 popup = new ContentDialog1() { };
        public uc_test()
        {
            this.InitializeComponent();                       
        }

        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            await popup.ShowAsync();
        }`

对我来说效果很好,并帮助我创建了一个响应式弹出窗口,因为它会应用您在主要 window 收缩时应用到用户控件上的所有触发器。

谢谢。