xaml:为单个ProgressRing更改ProgressRingElipseThemeSize而不定义新样式

时间:2015-01-19 10:52:56

标签: xaml windows-phone-8.1 resourcedictionary override contenttemplate

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

如果没有为ProgressRing定义全新的样式,我怎样才能在本地覆盖一个ProgressRing的ProgressRingElipseThemeSize

1 个答案:

答案 0 :(得分:1)

  

如果没有为ProgressRing定义全新的样式,我如何在本地为一个ProgressRing覆盖ProgressRingElipseThemeSize?

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