Browse Source

Fixes to get it working again after merge

pull/1016/head
Nikita Tsukanov 9 years ago
parent
commit
abf866cf61
  1. 3
      samples/interop/WindowsInteropTest/EmbedToWpfDemo.xaml.cs
  2. 4
      src/Avalonia.Diagnostics/DevTools.xaml.cs
  3. 10
      src/Avalonia.Layout/IEmbeddedLayoutRoot.cs
  4. 10
      src/Avalonia.Layout/LayoutManager.cs
  5. 4
      src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs

3
samples/interop/WindowsInteropTest/EmbedToWpfDemo.xaml.cs

@ -27,11 +27,12 @@ namespace WindowsInteropTest
{ {
InitializeComponent(); InitializeComponent();
var view = new MainView(); var view = new MainView();
Host.Content = view;
view.AttachedToVisualTree += delegate view.AttachedToVisualTree += delegate
{ {
view.AttachDevTools(); view.AttachDevTools();
}; };
Host.Content = view;
var btn = (Avalonia.Controls.Button) RightBtn.Content; var btn = (Avalonia.Controls.Button) RightBtn.Content;
btn.Click += delegate btn.Click += delegate
{ {

4
src/Avalonia.Diagnostics/DevTools.xaml.cs

@ -88,9 +88,7 @@ namespace Avalonia.Diagnostics
{ {
var devToolsWindow = (Window)sender; var devToolsWindow = (Window)sender;
var devTools = (DevTools)devToolsWindow.Content; var devTools = (DevTools)devToolsWindow.Content;
var window = (Window)devTools.Root; s_open.Remove((TopLevel)devTools.Root);
s_open.Remove(window);
_keySubscription.Dispose(); _keySubscription.Dispose();
devToolsWindow.Closed -= DevToolsClosed; devToolsWindow.Closed -= DevToolsClosed;
} }

10
src/Avalonia.Layout/IEmbeddedLayoutRoot.cs

@ -0,0 +1,10 @@
namespace Avalonia.Layout
{
/// <summary>
/// A special layout root with enforced size for Arrange pass
/// </summary>
public interface IEmbeddedLayoutRoot : ILayoutRoot
{
Size AllocatedSize { get; }
}
}

10
src/Avalonia.Layout/LayoutManager.cs

@ -186,14 +186,12 @@ namespace Avalonia.Layout
if (!control.IsArrangeValid && control.IsAttachedToVisualTree) if (!control.IsArrangeValid && control.IsAttachedToVisualTree)
{ {
if (control is ILayoutRoot root) if (control is IEmbeddedLayoutRoot embeddedRoot)
{ control.Arrange(new Rect(embeddedRoot.AllocatedSize));
root.Arrange(new Rect(root.ClientSize)); else if (control is ILayoutRoot root)
} control.Arrange(new Rect(root.DesiredSize));
else else
{
control.Arrange(control.PreviousArrange.Value); control.Arrange(control.PreviousArrange.Value);
}
} }
} }

4
src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs

@ -33,7 +33,7 @@ namespace Avalonia.Win32.Interop.Wpf
public EmbeddableControlRoot ControlRoot { get; } public EmbeddableControlRoot ControlRoot { get; }
internal ImageSource ImageSource { get; set; } internal ImageSource ImageSource { get; set; }
public class CustomControlRoot : EmbeddableControlRoot public class CustomControlRoot : EmbeddableControlRoot, IEmbeddedLayoutRoot
{ {
public CustomControlRoot(WpfTopLevelImpl impl) : base(impl) public CustomControlRoot(WpfTopLevelImpl impl) : base(impl)
{ {
@ -52,6 +52,8 @@ namespace Avalonia.Win32.Interop.Wpf
LayoutManager.Instance.ExecuteLayoutPass(); LayoutManager.Instance.ExecuteLayoutPass();
Renderer?.Resized(clientSize); Renderer?.Resized(clientSize);
} }
public Size AllocatedSize => ClientSize;
} }
public WpfTopLevelImpl() public WpfTopLevelImpl()

Loading…
Cancel
Save