我有一个使用Popup的WPF用户控件.此控件是一个插件,可以加载到主AppDomain或单独的AppDomain中,并使用ElementHost以Winforms形式托管.当插件在主AppDomain中加载并打开弹出窗口时,弹出窗口的字段之间的选项卡会将焦点移动到弹出窗口父窗口的第一个控件.当它加载到新的AppDomain中时,选项卡行为按预期/期望的方式工作(它会循环显示弹出窗口中的控件).
我已经在SO和其他地方阅读了许多相似但不完全相同的问题,但没有一个建议有所帮助.
看来Tab键消息是在AddInHost中处理的(它来自我使用FrameworkElementAdapters来在域外情况下跨域边界编组WPF控件).我的最终目标是将其实现为托管外接程序框架插件,但我已经减少了WAY以简化repro.
如果它有助于拥有更完整的上下文,我有一个简化repro的git repo
我该怎么做才能使这种行为保持一致?
WpfUserControl.xaml
<UserControl x:Class="MyPlugin.WpfUserControl"
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" Background="White">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="28" />
<RowDefinition Height="28" />
<RowDefinition Height="28" />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Margin="3" />
<Button x:Name="DropDownButton" Grid.Row="1" Margin="3" HorizontalAlignment="Left" MinWidth="100" Content="Drop Down" Click="DropDownButton_OnClick" />
<Popup Grid.Row="1" x:Name="Popup1" Placement="Right" StaysOpen="True" PlacementTarget="{Binding ElementName=DropDownButton}">
<Border BorderBrush="Black" BorderThickness="1">
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Label Content="Username:" Grid.Row="0" Grid.Column="0" Margin="3" />
<TextBox Grid.Row="0" Grid.Column="1" Margin="3" MinWidth="150" …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET 5.0(vnext)项目,我正在实现Web Api和Mvc前端.我希望我的Mvc控制器可以调用Web Api控制器,它运行正常.我根据http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6上的示例构建了api ,它运行良好.Mvc前端可以成功调用WebApi控制器,但是当我从Mvc控制器实例化它时,依赖注入框架不会提供ITodoRepository.
public class Startup
{
public void Configure(IApplicationBuilder app, ILoggerFactory logFactory)
{
...
app.UseServices(services =>
{
services.AddSingleton<ITodoRepository, TodoRepository>();
});
...
[Route("api/[controller]")]
public class TodoController : Controller
{
/* The ITodoRepository gets created and injected, but only when the class is activated by Mvc */
TodoController(ITodoRepository repository)
{
_repository = repository;
}
[HttpGet]
public IEnumerable<TodoItem> Get()
{
return _repository.AllItems;
}
...
public class HomeController : Controller
{
public IActionResult Index()
{
var tc = new …Run Code Online (Sandbox Code Playgroud)