我在Caliburn.Micro屏幕上接受用户输入时遇到TextBoxes时遇到问题。我试图尽可能地简化事情以获得一个有效的(失败的)演示。
以下是观点:
<UserControl x:Class="Bogus.TestView"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<TextBlock Text="Enter some text here" />
<TextBox />
</StackPanel>
</UserControl>
这里是viewmodel:
using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bogus
{
public class TestViewModel : Screen
{
}
}
我在WinForms控件中激活屏幕:
var w = Caliburn.Micro.IoC.Get<Caliburn.Micro.IWindowManager>();
dynamic settings = new ExpandoObject();
settings.WindowStyle = System.Windows.WindowStyle.ToolWindow;
settings.SizeToContent = System.Windows.SizeToContent.Manual;
settings.Height = 600;
settings.Width = 700;
w.ShowWindow(new TestViewModel(), settings: settings);
如果我尝试输入该文本框,只显示空格。输入&#34; Hello World!&#34;你得到一个单一的空间,就是这样。 :(
奇怪的是,我能够从这个屏幕激活其他屏幕而且我的TextBox工作得很好......但是在这个屏幕上?什么都没有。
答案 0 :(得分:0)
这个问题非常有用:How to get a reference to window from a user control using Caliburn Micro
有了这个想法,我就可以做以下操作来获得按键以进入新窗口:
w.ShowWindow(viewModel, settings: settings);
var view = viewModel.GetView() as System.Windows.DependencyObject;
var win = System.Windows.Window.GetWindow(view);
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(win);
这是正确的方法吗?有更好的解决方案吗?