2016-06-02 10 views
0

У меня есть пользовательский контроль в отдельном проекте. В моем главном проекте свойства видимости некоторых элементов управления связаны с этим элементом управления. Например:Предотвращение WPF для оценки контроля во время разработки

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

Во время разработки свойство возвращает ложь и groupControls становится невидимым, так что я не могу видеть это. Я хочу, чтобы разработчик не оценивал свойство, как если бы он был определен в одном проекте.

Использование DesignerProperties.IsInDesignModeProperty не решает проблему, потому что некоторые элементы управления видны, когда значение истинно, а другое, когда оно ложно.

ответ

0

Я не знаю, как это сделать, и я считаю, что он не был предназначен для работы таким образом.

Вы можете изменить вам конвертер реализовать IMultiValueConverter и использовать свойство Window IsLoaded в качестве второго параметра, чтобы сделать это.

Создать DependencyProperty, WindowIsLoaded, например, тогда, на Loaded событие изменения значения для истинного.

На конвертер, когда WindowIsLoaded является приравнивает к ложной всегда возвращают Visibility.Visible.

ON КОД:

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> 

Теперь конструктор будет Получать ложные из WindowIsLoaded и все ваши элементы управления будут видны на Режим дизайнера.

Смежные вопросы