2016-11-30 21 views
0

Ich versuche, CefSharp schön mit Caliburn.Micro spielen, aber das war nicht so einfach wie ich gehofft hatte. Es ist wahrscheinlich immer noch einfach, aber ich kenne sie einfach nicht genug.CefSharp.WPF Integration mit Caliburn.Micro

Ich habe meine Ansicht eine Browser-Komponente:

<cefsharp:ChromiumWebBrowser x:Name="Browser"></cefsharp:ChromiumWebBrowser> 

Dann eine Eigenschaft meiner Ansicht nach Modell mit dem gleichen Namen ich hinzugefügt:

public ChromiumWebBrowser Browser { get; set; } 

ich jetzt hatte gehofft, dass Caliburn.Micro Magie hatte diese Eigenschaft an den tatsächlichen Browser in der Ansicht gebunden, so dass ich Browser von meinem Code-behind verwenden konnte.

Um dies zu testen, ich versuche, zu einer bestimmten Webseite zu gehen, wenn die Sicht aktiviert:

protected override void OnActivate() 
{ 
    Browser.Dispatcher.Invoke(() => 
    { 
     Browser.Address = "http://stackoverflow.com"; 
     NotifyOfPropertyChange(() => Browser); 
    }); 
    base.OnActivate(); 
} 

Da von einem anderen Thread gehört Browser ich den Dispatcher bin mit der Lage sein, es richtig zuzugreifen.

All dieser Code läuft ohne Ausnahmen gut, aber SO wird nicht geöffnet, wenn der Browser geladen wird.

Ich vermute, das ist, weil ich Caliburn.Micro nicht in der Lage gewesen bin, die beiden ChromiumWebBrowser Objekte richtig zu verbinden.

Wie kann ich das erreichen?

Antwort

0

Sie müssen benutzerdefinierte Konvention hinzufügen, um an dieses Steuerelement basierend auf der x:Name zu binden. Es gibt keinen Weg, da es ein 3rd-Party-Steuerelement ist, sonst müssen Sie Eigenschaften verwenden .. Die einzigen Steuerelemente, die Konventionen out-of-the-box haben, sind diejenigen, die in der Wpf/Silber/Windows Phone Framework (s) für .NET enthalten . Wenn Speicher mir dient, gibt es einige andere Schritte, die für dieses bestimmte Steuerelement zu initialize es ebenso benötigt werden.

http://caliburnmicro.com/documentation/conventions

Beispiele für benutzerdefinierte Konventionen für UI Telerik für Windows Phone

ConventionManager.AddElementConvention<RadDataBoundListBox>(DataControlBase.ItemsSourceProperty, "ItemsSource", "SelectionChanged"); 
ConventionManager.AddElementConvention<RadDockPanel>(RadDockPanel.DockProperty, "Dock", "DockChanged"); 
ConventionManager.AddElementConvention<RadListPicker>(ItemsControl.ItemsSourceProperty, "ItemsSource", "SelectionChanged"); 
ConventionManager.AddElementConvention<RadDatePicker>(DateTimePicker.ValueProperty, "Value", "ValueChanged"); 
ConventionManager.AddElementConvention<RadTimePicker>(DateTimePicker.ValueProperty, "Value", "ValueChanged"); 
ConventionManager.AddElementConvention<RadToggleSwitch>(RadToggleSwitch.IsCheckedProperty, "IsChecked", "CheckChanged"); 
ConventionManager.AddElementConvention<RadContextMenuItem>(RadContextMenuItem.CommandProperty, "Command", "Tap"); 
ConventionManager.AddElementConvention<RadHubTile>(HubTileBase.CommandProperty, "Command", "Tap"); 

diese sind sehr einfach, aber sie entsprechend arbeiten bekommen.

ConventionManager.AddElementConvention<Pivot>(ItemsControl.ItemsSourceProperty, "SelectedItem", "SelectionChanged").ApplyBinding = 
      (viewModelType, path, property, element, convention) => 
      { 
       if (ConventionManager 
        .GetElementConvention(typeof(ItemsControl)) 
        .ApplyBinding(viewModelType, path, property, element, convention)) 
       { 

        ConventionManager 
         .ConfigureSelectedItem(element, Pivot.SelectedItemProperty, viewModelType, path); 
        ConventionManager 
         .ApplyHeaderTemplate(element, Pivot.HeaderTemplateProperty, null, viewModelType); 

        return true; 
       } 
       return false; 
      }; 

fortgeschritteneren Konvention zum SelectedItem eines Items im Zusammenhang ...

Wie Sie seine völlig abhängig von der Steuer sehen selbst und die zur Verfügung stehenden DependencyProperties ausgesetzt zu verwenden.

Verwandte Themen