繁体   English   中英

添加的本地资源未显示在WPF页面中

[英]local resource added doesn't show up in WPF page

我有一个简单的WPF页面,其中添加了本地资源,该资源的定义在Page的后端文件中。

<Page x:Class="WindowsSampleApplication.ValueConverter"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:WindowsSampleApplication"
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
    Title="ValueConverter">
    <Page.Resources>
        <local:YesNoToBooleanConverter x:Key="YesNoToBooleanConverter" />
    </Page.Resources>

    <Grid>
        <StackPanel Margin="10">
            <TextBox Name="txtValue" />
            <WrapPanel Margin="0,10">
                <TextBlock Text="Current value is: " />
                <TextBlock Text="{Binding ElementName=txtValue, Path=Text, Converter={StaticResource YesNoToBooleanConverter}}"></TextBlock>
            </WrapPanel>
            <CheckBox IsChecked="{Binding ElementName=txtValue, Path=Text, Converter={StaticResource YesNoToBooleanConverter}}" Content="Yes" />
        </StackPanel>
    </Grid>
</Page>

这是Page的后端文件

namespace WindowsSampleApplication
{
    public partial class ValueConverter : Page
    {
        public ValueConverter()
        {
            InitializeComponent();
        }
        public class YesNoToBooleanConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                switch (value.ToString().ToLower())
                {
                    case "yes":
                        return true;
                    case "no":
                        return false;
                }
                return false;
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if (value is bool)
                {
                    if ((bool)value == true)
                        return "yes";
                    else
                        return "no";
                }
                return "no";
            }
        }
    }
}

我已经在Page级别正确包含名称空间WindowsSampleApplication ,并且相同的名称空间为我的资源定义了。 但是添加该local resource时出现以下error

错误图片

我刚刚从这里开始学习WPF教程,但是我只是尝试而不是按照教程学习的是添加页面而不是窗口,因为我已经创建了一个带有早先演示的Window ,并且希望我已经转换了页面所需的一切代替Window 有人对如何解决此问题有想法吗?

更新

我还在SO中准备好使用<ResourceDictionary>包装<local..../>时,但是并没有太大用处,并且仍然保持错误。

由于看起来您只是在尝试WPF,并且出于特殊原因将转换器放在代码后方,因此我建议使用通常的创建转换器的方法:

在您的WindowsSampleApplication项目中创建一个新目录Converters 然后为每个转换器添加一个新的类文件...

现在,您知道在哪里可以找到转换器,并且可以轻松地重用它们。

PS:可以将转换器作为嵌套类放在代码背后,但是您应该有一个很好的理由。 将转换器绑定为内部类吗?

我认为您的问题是您已将转换器嵌套在ValueConverter页面中。

[编辑]

实例化嵌套类是不可能的,因此唯一的选择是直接在WindowsSampleApplication名称空间中声明转换器类。

更新的代码

namespace WindowsSampleApplication
{
    public partial class ValueConverter : Page
    {
        public ValueConverter()
        {
            InitializeComponent();
        }
        //Removed from here
    }
    public class YesNoToBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            switch (value.ToString().ToLower())
            {
                case "yes":
                case "oui":
                    return true;
                case "no":
                case "non":
                    return false;
            }
            return false;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is bool)
            {
                if ((bool)value == true)
                    return "yes";
                else
                    return "no";
            }
            return "no";
        }
    }
}

您需要直接在名称空间中声明YesNoToBooleanConverter 从MSDN:WPF的XAML和自定义类

您的自定义类必须是公共的,并支持默认(无参数)公共构造函数。 (有关结构的注释,请参阅以下部分。)您的自定义类不得为嵌套类。 嵌套类和常规CLR使用语法中的“点”会干扰其他WPF和/或XAML功能(例如附加属性)。

链接:

https://msdn.microsoft.com/zh-CN/library/ms753379(v=vs.100).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM