0

我的 windows phone 8.1 项目包含带有 ProgressBar.xaml(此处覆盖 ProgressRing 样式)和 Menu.xaml(用于弹出项的模板)的“资源”文件夹。

我的 App.xaml 看起来像这样:

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

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Menu.xaml"/>
                <ResourceDictionary Source="Resources/ProgressBar.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>

ProgressBar.xaml 包含generic.xaml 的精确副本<Style TargetType="ProgressRing">。这种风格在自身内部定义了另一种风格:

<Style x:Key="ProgressRingEllipseStyle" TargetType="Ellipse">
    <Setter Property="Width" Value="{ThemeResource ProgressRingElipseThemeSize}"/>
    <Setter Property="Height" Value="{ThemeResource ProgressRingElipseThemeSize}"/>
    <Setter Property="Margin" Value="{ThemeResource ProgressRingElipseThemeMargin}"/>
    <Setter Property="Opacity" Value="0"/>
</Style>

<x:Double x:Key="ProgressRingElipseThemeSize">6.5</x:Double>

除了弹出项目外,我的应用程序周围的 ProgressRingElipseThemeSize = 6.5 都可以。我的 Menu.xaml 模板:

<ControlTemplate TargetType="MenuFlyoutItem" 
                x:Key="CustomerFlyoutItem">
    <StackPanel Orientation="Horizontal">
        <Grid MinWidth="40">
            <Image Source="ms-appx:///Assets/Check.png"
                Stretch="None"                           
                Visibility="{Binding IsSelected,Converter={StaticResource BooleanToVisibility}}" />

            <ProgressRing Visibility="{Binding IsLoading,Converter={StaticResource BooleanToVisibility}}"
                        IsActive ="True"
                        Foreground="{StaticResource BekeyContrastSolidColorBrush}"
                        MinHeight="40"
                        MinWidth="40">
                <ProgressRing.Resources>
                    <x:Double x:Key="ProgressRingElipseThemeSize">3</x:Double>
                </ProgressRing.Resources>
            </ProgressRing>
        </Grid>
        <TextBlock Text="{Binding Name}"
                Margin="6,0,0,0"/>
    </StackPanel>
</ControlTemplate>

在那里,我将 ProgressRing 的高度和宽度设为 40,我想将椭圆的大小更改为 3。但ProgressRingElipseThemeSize在内部覆盖<ProgressRing.Resources>并不会做出任何改变。

我确信ProgressRingElipseThemeSize是我应该改变的。<Style TargetType="ProgressRing">如果我像这样直接进行更改

<Style x:Key="ProgressRingEllipseStyle" TargetType="Ellipse">
    <Setter Property="Width" Value="3"/>
    <Setter Property="Height" Value="3"/>
    <Setter Property="Margin" Value="{ThemeResource ProgressRingElipseThemeMargin}"/>
    <Setter Property="Opacity" Value="0"/>
</Style>

MenuFlyoutItem 看起来很完美,但显然我的应用程序中的其他进度环受到影响,这是不可取的。

如何ProgressRingElipseThemeSize在不为 ProgressRing 定义全新样式的情况下仅在本地覆盖一个 ProgressRing?

4

1 回答 1

1

如何在不为 ProgressRing 定义全新样式的情况下仅在本地为一个 ProgressRing 覆盖 ProgressRingElipseThemeSize?

您只能覆盖 App.xaml 中的系统级资源。如果您只想更改一个进度环,则需要重新模板化控件。

于 2015-01-19T12:03:13.300 回答