簡體   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