2014-11-24 2 views
1

В моем приложении WPF я использую Caliburn.Micro (2.0.1). В App.xaml Заявляет BooleanToVisibilityConverterСтранное поведение BooleanToVisibilityConverter с использованием Caliburn.Micro

<BooleanToVisibilityConverter x:Key="BoolToVis" /> 

Теперь, когда я хочу использовать в одном из моего взгляда этого конвертера я написал что-то вроде этого

<Button x:Name="MyButton" Visibility="{Binding visibility, Converter={StaticResource BoolToVis} }"/> 

Все прекрасно работает, но теперь я должен использовать этот конвертер в моем MainVeiew. Этот вид - мой основной взгляд. При запуске приложения это бросить исключение,

System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll 

Это Верри странно для меня, потому что, если я пишу на мой взгляд

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BoolToVis2" /> 
</Window.Resources> 

и использовать BoolToVis2 вместо BoolToVis все работает отлично. Это неважно, но я не понимаю этого поведения.

Sample код applcation:

App.xaml

<Application x:Class="Test.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:Test" 
     > 
<Application.Resources> 
    <ResourceDictionary > 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary> 
       <local:AppBootstrapper x:Key="Bootstrapper" /> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
     <BooleanToVisibilityConverter x:Key="BoolToVis" /> 
    </ResourceDictionary> 
</Application.Resources> 
</Application> 

AppBootstrapper

public class AppBootstrapper:BootstrapperBase 
{ 
    public AppBootstrapper() 
    { 
     Initialize(); 
     DisplayRootViewFor<MainViewModel>(); 
    } 
} 

MainViewModel

public class MainViewModel : Screen 
{ 
    bool _visibility; 


    public bool Visibility 
    { 
     get { return _visibility; } 
     set 
     { 
      _visibility = value; 
      NotifyOfPropertyChange("Visibility"); 
     } 
    } 

    protected override void OnActivate() 
    { 
     base.OnActivate(); 
     Visibility = false; 
    } 
} 

MainView

<Window x:Class="Test.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainView" Height="300" Width="300"> 
<Grid> 
    <Button x:Name="MyButton" Content="Test" Visibility="{Binding Visibility, Converter={StaticResource BoolToVis}}" /> 
</Grid> 

+1

Должно быть, это сработало, поэтому проблема в другом месте. Попробуйте переделать это в приложении nimimal, и если он все еще не работает, отправьте этот код. –

ответ

1

Visibility свойство для любого UIElement получает значение от видимости переписчика. вместо использования булевого использования Видимое, скрытое или сложенное.

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