簡體   English   中英

資源字典不起作用-找不到名稱/密鑰的異常

[英]Resource Dictionary not working - Exception raised for Name/Key not found

我剛剛開始使用資源字典,但由於我的資源字典根本無法使用,所以我一直堅持下去。 我嘗試過代碼隱藏和XAML,但每次遇到異常時,應用程序就會崩潰。

如果我通過XAML引用字典,則會在運行時得到找不到名稱/關鍵字的異常。 我在App.xaml使用的代碼是:

<Application
x:Class="WatchfreeWebsite.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WatchfreeWebsite.Helpers">

<Application.Resources>

    <TransitionCollection x:Key="TransCollection">
        <EdgeUIThemeTransition Edge="Right"/>
    </TransitionCollection>

    <ResourceDictionary x:Key="resourcesDictionary">
        <ResourceDictionary.MergedDictionaries>
            <local:GlobalTemplates Source="Helpers/GlobalTemplates.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</Application.Resources>

資源字典包含一個DataTemplate和一個MediaTransportControlsStyle但是我似乎無法通過XAML引用它,因為它提供了語法錯誤,並且在運行時頁面在將XAML加載到InitializeComponent();時生成異常InitializeComponent(); 階段。

資源字典:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WatchfreeWebsite.Helpers"
x:Class="WatchfreeWebsite.Helpers.GlobalTemplatesClass"
xmlns:data="using:WatchfreeWebsite.Helpers">


<DataTemplate x:Key="StreamBoxItemTemplate"
              x:DataType="data:StreamingHelper">
    <TextBlock Text="{x:Bind StreamName, Mode=OneWay}"
                       Style="{StaticResource BodyTextBlockStyle}"
                       TextWrapping="NoWrap"
                       MaxLines="1"
                       TextTrimming="WordEllipsis"/>
</DataTemplate>

<Style TargetType="MediaTransportControls"
       x:Key="myCustomTransportControls">
    <Setter Property="IsTabStop" Value="False" />
.......
</Style>

</ResourceDictionary>

資源字典背后的類是:

public partial class GlobalTemplatesClass
{
    public GlobalTemplatesClass()
    {
        this.InitializeComponent();
    }
}

我在上面的樣式中引用了DataTemplate ,並且在另一頁中將該樣式引用為:

 <MediaPlayerElement x:Name="MediaView"
                            Grid.Row="2"
                            Source="{Binding MediaSourceObject, Mode=OneWay}"
                            DoubleTapped="MediaView_DoubleTapped"
                            AreTransportControlsEnabled="True">
            <MediaPlayerElement.TransportControls>
                <data:CustomTransportControlsHelper Style="{StaticResource ResourceKey=myCustomTransportControls}"/>
            </MediaPlayerElement.TransportControls>
        </MediaPlayerElement>

但這不起作用,資源名稱下方有一條紅線,表示未找到該資源。

有什么我想念的嗎? 如果有人可以在這里幫助我,請提供您的建議。 謝謝

當您在資源下添加多個項目時,每個項目都應位於<ResourceDictionary>標記內,而不應直接位於<Application.Resources>

這是因為Resources 本身是一個字典,因此您實際上是在嘗試替換該集合,而不是向其中添加元素。 此處的文檔: https : //msdn.microsoft.com/zh-cn/library/system.windows.application.resources%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

我創建了一個示例項目,該項目在項目基礎級別僅包含一個App.xaml ,一個名為Helpers的文件夾,並在Helpers下的一個名為GlobalTemplates.xamlResourceDictionary與您的文件夾匹配。

解決方案資源管理器

GlobalTemplates.xaml創建了一個簡單的畫筆作為示例

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1.Helpers">
    <SolidColorBrush x:Key="DefaultForeground" Color="DarkGreen" />
</ResourceDictionary> 

App.xaml

    <Application
    x:Class="App1.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    RequestedTheme="Light">
    <Application.Resources>
        <ResourceDictionary>
            <TransitionCollection x:Key="TransCollection">
                <EdgeUIThemeTransition Edge="Right"/>
            </TransitionCollection>

            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Helpers/GlobalTemplates.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

然后在MainPage.xaml成功引用了字典中的樣式:

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock Foreground="{StaticResource DefaultForeground}">Hello world</TextBlock>
    </Grid>
</Page>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM