2016-06-02 14 views
0

Ich habe benutzerdefinierte Steuerung in einem separaten Projekt. In meinem Hauptprojekt sind die Sichtbarkeitseigenschaften einiger Steuerelemente mit diesem Steuerelement verbunden. Zum Beispiel:Verhindern, dass WPF die Steuerung während der Entwurfszeit auswertet

<Canvas x:Name="groupControls" Visibility="{Binding IsActive, ElementName=MyControl, Converter={StaticResource BooleanToVisibilityConverter}}">

während der Entwurfszeit gibt die Eigenschaft falsch und groupControls werden unsichtbar, so kann ich es nicht sehen. Ich möchte verhindern, dass der Designer die Eigenschaft so bewertet, als ob sie im selben Projekt definiert wäre.

Die Verwendung von DesignerProperties.IsInDesignModeProperty löst das Problem nicht, da einige Steuerelemente sichtbar sind, wenn der Wert wahr und einige, wenn sie falsch sind.

Antwort

0

Ich weiß nicht, wie man das macht und ich glaube, es wurde nicht so entworfen, um so zu arbeiten.

Sie können Sie Converter ändernIMultiValueConverter und verwenden Sie die Fenster Eigenschaft als zweiten Parameter IsLoaded zu implementieren, das zu tun.

erstellen DependencyProperty, WindowIsLoaded zum Beispiel dann, auf Ereignis den Wert wahr ändern geladen.

Auf Converter, wenn WindowIsLoaded ist gleich zu falsch Rückkehr immer Visibility.Visible.

ON CODE:

public bool WindowIsLoaded 
{ 
    get { return (bool)GetValue(WindowIsLoadedProperty); } 
    set { SetValue(WindowIsLoadedProperty, value); } 
} 
public static readonly DependencyProperty WindowIsLoadedProperty = 
     DependencyProperty.Register("WindowIsLoaded", typeof(bool), typeof(Window), 
      new PropertyMetadata(false)); 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    WindowIsLoaded = true; 
} 

public class BooleanToVisibilityConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var isActivated = (bool)values[0]; 
     var isLoaded = (bool)values[1]; 

     if (!isLoaded) 
      return Visibility.Visible; 

     return isActivated ? Visibility.Visible : Visibility.Collapsed 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new Exception("Only oneway binding!"); 
    } 
} 

XAML:

xmlns:local="clr-namespace:YourProjectNamespace.YourWindow" 
<Canvas x:Name="groupControls"> 
    <Canvas.Visibility> 
     <MultiBinding Converter="{StaticResource BooleanToVisibilityConverter}"> 
      <Binding ElementName="MyControl" Path="IsActivated"/> 
      <Binding RelativeSource="{RelativeSource AncestorType={x:Type local:MainWindow}, 
             Mode=FindAncestor}" 
        Path="WindowIsLoaded" /> 
     </MultiBinding> 
    </Canvas.Visibility> 
</Canvas> 

Nun ist die Designer recive werden falsch von WindowIsLoaded und alle Ihre Steuerelemente sind unter Designer Mode sichtbar.