xaml:在不定义新样式的情况下更改单个 ProgressRing 的 ProgressRingElipseThemeSize

xaml: Change ProgressRingElipseThemeSize for single ProgressRing without defining new Style

我的 windows phone 8.1 项目包含 'Resources' 文件夹,其中包含 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。但是在 <ProgressRing.Resources> 中覆盖 ProgressRingElipseThemeSize 不会进行任何更改。

我确定 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 看起来很完美,但显然我的应用程序中的其他进度环受到影响,这是不可取的。

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

How can I override ProgressRingElipseThemeSize locally for one ProgressRing only without defining a brand new style for ProgressRing?

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