在Windows Phone中使用Caliburn Micro进行弹出

时间:2013-10-07 11:04:12

标签: c# wpf windows-phone-8 caliburn.micro

任何人都可以解释如何在Caliburn Micro中使用XAML弹出窗口。

由于

编辑:(使我的代码更接近我想要实现的目标) 当我在xaml中定义一个像这样的弹出窗口时:

<Button x:Name="ShowPopup" Content="Popup"/>
<Popup x:Name="my_popup_xaml" Grid.Row="2">
    <Border  BorderThickness="2" Margin="10" BorderBrush="Green">
        <StackPanel Background="LightBlue">
            <TextBlock Text="Select Option" FontSize="21" Margin="10,0" />
            <StackPanel Orientation="Horizontal" Margin="0,10">
                <Button x:Name="SelectPhoto"  Content="Select photo From Library" Width="215"/>
                <Button x:Name="CapturePhoto"    Content="Use Camera"   Width="215"/>
            </StackPanel>
        </StackPanel>
    </Border>
</Popup>

如何使用WindowManager显示此弹出窗口?

我应该为此创建新的View Model,因为我只需要在这里使用PhotoChooser任务和Camera Capture任务吗?

如何将Popup绑定到我的视图模型。

编辑:

@Charleh,您对使用带有单独ViewModel的windowmanager的建议有效,并进行了一些小调整。

我删除了<Popup>标记并使用窗口管理器显示弹出窗口。

但现在我无法关闭弹出窗口,弹出窗口被裁剪,因为它显示在屏幕顶部。我该如何解决这个问题?

编辑:我可以使用屏幕的TryClose()方法关闭对话框。

当我使用ShowDialog方法而不是ShowPopup方法时,窗口的对齐方式稍好一些,但它仍然位于顶部并且不会在中心对齐。

Dialog Image

编辑:我创建了一个新的PhoneApplicationPage(相当于Windows Phone 8的窗口)并将其显示为对话框。这种方法的问题在于PhoneApplicationPage没有自动伸展以填充屏幕空间(当它不显示为对话框时它会这样做)。它只是伸展以容纳其中的内容。设置`VerticalAlignment =“Stretch”无效。

Height属性赋予特定值是不合适的,因为它不能很好地适应不同的电话分辨率。

@Charleh我试着像这样指定高度和宽度:

Dictionary<string, object> properies = new Dictionary<string, object>();
properies.Add("Height", 768);
properies.Add("Width", 480);
windowManager.ShowDialog(new ImageSelectorPopupViewModel(),null,properies);

此代码无效(虽然在Xaml中指定高度可以工作,但我无法使用它,因为我必须适应手机上不同的屏幕分辨率)

1 个答案:

答案 0 :(得分:1)

在发布之前,你真的需要阅读Caliburn Micro--有大量的文章展示了如何将视图上的命令绑定到VM上的方法

在这种情况下要这样做:

  1. 通过为您的按钮指定与方法

    相同的名称来绑定约定

    <Button x:Name="ShowPopup" />

  2. 使用操作消息语法绑定:

    <Button cal:Message.Attach="[ShowPopup]" />

  3. 所有答案都在这里:http://caliburnmicro.codeplex.com/documentation

    (具体来说:http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation

    你用你的按钮做同样的事情,所以你可以用你的弹出窗口做同样的事情

    (您是否也考虑过使用具有ShowPopup方法的Caliburns WindowManager?)

    编辑:

    在重新阅读时,您似乎希望为当前的View和Popup使用相同的ViewModel - 是这种情况还是您想要一个新的ViewModel用于您的Popup?我建议使用WindowManager,并为弹出窗口创建一个ViewModel - 它将更符合CM已经做的