【问题标题】:How to get rid of the namespace error in xaml WP8.1如何摆脱 xaml WP8.1 中的命名空间错误
【发布时间】:2015-09-01 23:32:43
【问题描述】:

我正在开发一个 Windows Phone 8.1 项目,我目前在使用我的 BooleanToVisibility 转换器时遇到问题。

这是转换器本身:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (!(value is bool))
            return Visibility.Collapsed;
        bool objValue = (bool)value;
        if (objValue)
        {
            return Visibility.Visible;
        }
        return Visibility.Collapsed;

    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

这是我的 Xaml:

<Page
x:Class="CityBox.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="using:CityBox.Views"
xmlns:converters="using:CityBox.Converters"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
DataContext="{Binding Main, Source={StaticResource Locator}}"
x:Name="MyMainPage">

<Page.Resources>
    <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Page.Resources>


<Grid>
    <views:DataLoadingView x:Name="DataLoadingView" 
                           Visibility="{Binding LoadingViewVisibility, Converter={StaticResource BooleanToVisibilityConverter}}"/>
    <views:DrawerView  x:Name="DrawerView"  
                       Visibility="{Binding DrawerViewVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Grid>
</Page>

最后是我的 ViewModel 中的布尔值:

private bool _loadingViewVisibility;
    private bool _drawerViewVisibility;

    public bool LoadingViewVisibility
    {
        get { return _loadingViewVisibility;}
        set
        {
            _loadingViewVisibility = value;
            RaisePropertyChanged("LoadingViewVisibility");
        }
    }
    public bool DrawerViewVisibility
    {
        get { return _drawerViewVisibility; }
        set
        {
            _drawerViewVisibility = value;
            RaisePropertyChanged("DrawerViewVisibility");
        }
    }

我不明白的一件事,我认为问题可能来自于在资源中(在 xaml 中),我有某种警告告诉我“BooleanToVisibilityConverter”不在指定的命名空间中,即很奇怪,因为它是由 resharper 自动添加的。我认为这只是 VS 的错误,有时会发生,但是当我更改布尔值时它不起作用。

希望我足够精确,可以帮助您! 提前致谢, 纪尧姆。

编辑:我刚刚进行了一些测试,这里有一些有趣的东西:

    <Grid>
    <!--<TextBlock Text="Test1" Visibility="{Binding Test2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
    <TextBlock Text="Test2" Visibility="{Binding Test1, Converter={StaticResource BooleanToVisibilityConverter}}"/>-->
    <views:LoadingView Visibility="{Binding Test2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
        <views:DrawerView Visibility="{Binding Test1, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>

如果我取消注释两个文本块并注释我的两个视图,那么它就可以工作。 如果我这样做,它不会。在每个视图中简单地放置一个文本块,上面写着“正在加载”和“抽屉”。在我取消注释两个视图并尝试通过将布尔设置为 false 来隐藏一个的情况下,这两个视图在屏幕上可见。如果我用两个文本框来做这件事就不会发生!

【问题讨论】:

  • 将转换器更改为转换器
  • 即使更改后我仍然有同样的错误

标签: c# wpf xaml mvvm windows-phone-8.1


【解决方案1】:

将您的 xml 更改为:

<Page
x:Class="CityBox.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="using:CityBox.Views"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
DataContext="{Binding Main, Source={StaticResource Locator}}"
x:Name="MyMainPage">

<Page.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Page.Resources>

<Grid>
<views:DataLoadingView x:Name="DataLoadingView" 
                       Visibility="{Binding LoadingViewVisibility, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<views:DrawerView  x:Name="DrawerView"  
                   Visibility="{Binding DrawerViewVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" />

【讨论】:

  • 如果我没有放置“转换器:”,那么我在静态资源处从 Visual Studio 收到一个真正的错误,说“无效资源:预期 IValueConverter”
  • 我没有 wp8。但是在 wpf 中,如果我输入 xmlns:converters="clr-namespace:CityBox.Converters" 并编译它,问题就会消失。@bottus
  • 尝试了你的解决方案,我得到了与上面相同的结果,真正的编译错误
  • 看看here。同样的问题。这是一种错误。我通过重新编译或清理解决方案来修复它并重新编译。如果它不起作用,请尝试链接中给出的解决方案@bottus
  • 我不知道。那么这会影响警告吗?如果是这样,我想你的问题在其他地方。 @bottus
猜你喜欢
  • 2015-09-03
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
相关资源
最近更新 更多