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 中的系统级资源。如果您只想更改一个进度环,则需要重新模板化控件。
我的 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 中的系统级资源。如果您只想更改一个进度环,则需要重新模板化控件。