【问题标题】:Popup with Caliburn Micro in Windows Phone在 Windows Phone 中使用 Caliburn Micro 弹出窗口
【发布时间】:2013-10-07 11:04:11
【问题描述】:

谁能解释如何在 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 显示此弹出窗口?

我是否应该为此创建新的视图模型,因为我只需要在这里使用 PhotoChooser 任务和 Camera Capture 任务?

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

编辑:

@Charleh,您建议将 windowmanager 与单独的 ViewModel 一起使用,只需稍作调整即可。

我删除了&lt;Popup&gt; 标签并使用窗口管理器来显示弹出窗口。

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

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

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

编辑:我创建了一个新的 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 中指定高度有效,但我不能使用它,因为我必须适应手机上不同的屏幕分辨率)

【问题讨论】:

  • 到目前为止有什么努力吗?请阅读FAQHow to Ask
  • 嗯,我从来没有用 WP8 做过任何事情,所以我不确定 - 你能发个截图吗?
  • 当您通过 ShowPopup 或 ShowDialog 创建弹出窗口或对话框时,CM 会检查视图类型:如果视图不从 Popup/Window 继承,它将创建一个并用新实例包装您的控件。您可以尝试从 Popup 或 Window 继承,这样您就可以设置位置等 - 您还可以将参数传递给 ShowPopup/ShowDialog 以设置窗口位置/大小。 void ShowDialog(object rootModel, object context = null, IDictionary&lt;string, object&gt; settings = null);。该字典允许您传递将在窗口/弹出窗口上设置的键/值对。让我知道这是否有帮助
  • 例如ShowPopup(SomeViewModel, null, Properties); 其中属性 = 字典,条目为 Key = "Width"Value = 100

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


【解决方案1】:

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

在这种情况下这样做:

  1. 通过为按钮提供与方法相同的名称来使用约定绑定

    &lt;Button x:Name="ShowPopup" /&gt;

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

    &lt;Button cal:Message.Attach="[ShowPopup]" /&gt;

所有答案都在这里: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 已经做的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多