如何从资源加载样式

时间:2017-03-31 18:42:15

标签: windows xaml uwp windows-10 windows-10-universal

当我尝试将资源样式从文件加载到UIElement时,我遇到了问题。 我的资源文件包含ToggleSwitch默认样式的副本,我只更改了一些颜色。 我尝试了以下资源引用:

<Page.Resources>
    <ResourceDictionary x:Key="GreenToggleResourceDictionary">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="GreenToggleSwitch.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>

我的ToggleSwitch看起来像这样,但它不会使用引用资源中的样式&#34; GreenToggleSwitch.xaml&#34;:

<ToggleSwitch x:Name="ToggleSwitch"
      Style="{StaticResource GreenToggleSwitchStyle}"
      HorizontalAlignment="Right"
      VerticalAlignment="Center"
      Toggled="ToggleSwitch_Toggled"
</ToggleSwitch>

这是GreenToggleSwitch.xaml,它几乎是ToggleSwitch的默认模板:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CUE">

<x:Double x:Key="ToggleSwitchOnStrokeThickness">0</x:Double>
<Style TargetType="ToggleSwitch" x:Key="GreenToggleSwitchStyle">
    .
    .
    .
</Style>
</ResourceDictionary>

由于Style&#39; GreenToggleSwitch&#39;此代码无法正常工作。我想用。

代码是如何工作的?

基本上我想将切换拇指(/旋钮)周围的蓝色改为绿色。如果我将我的资源文件中的代码放入我的MainPage.xaml中,它将起作用。

感谢您的帮助, 尤

1 个答案:

答案 0 :(得分:1)

是的,资源字典不是样式。你想要的风格的x:Key属性是什么?用那个。如果是x:Key="Planxty",请使用Style="{StaticResource Planxty}"。如果是x:Key="ImALittleTeapot",请使用Style="{StaticResource ImALittleTeapot}"

如果它没有键,则它是隐式样式,它应该适用而不需要你做任何进一步的努力。

其次,您应该将正在加载的字典合并到窗口/ page / usercontrol /中的字典中。

像这样:

<Page.Resources>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="GreenToggleSwitch.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</Page.Resources>

更新

GreenToggleSwitchResource未在任何地方定义。当你向它抛出奇怪的随机字符串时,XAML解析器不会试图猜测你的意图。它会说“Dammit,Jim,我是一名解析员,而不是一名超心理学家!”

使用您定义的标识符。这是编程。我们通过我们提供的标识符来调用它们。你称之为GreenToggleSwitchStyle。这就是你如何引用它。

<ToggleSwitch x:Name="ToggleSwitch"
    Style="{StaticResource GreenToggleSwitchStyle}"
    HorizontalAlignment="Right"
    VerticalAlignment="Center"
    Toggled="ToggleSwitch_Toggled"
</ToggleSwitch>

我不知道你对所有主题的内容是什么,你没有说,所以我没有解决这个问题。