簡體   English   中英

在WPF中更改樣式的ControlTemplate

[英]Change ControlTemplate of a Style in WPF

MobileApp.Get().Resources.MergedDictionaries.Clear();
Uri uri = new Uri("/Resources/NightModeButton.xaml", UriKind.Relative);
ResourceDictionary resDict = Application.LoadComponent(uri) as ResourceDictionary;

int count = resDict.Values.Count; //count is 1

foreach (object obj in resDict.Values)
{
   Style style = obj as Style;  //NOW I HAVE THE STYLE

   //How do I modify the color of element named "GradientStop0" ???
}
<!-- NightButtonMode.xaml --> 
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">

                                <VisualState x:Name="Normal"/>
                                    <VisualState x:Name="MouseOver">
                                        <Storyboard>
                                            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="InnerRectangle">
                                                <EasingColorKeyFrame KeyTime="0" Value="#FF9B7C35"/>
                                            </ColorAnimationUsingKeyFrames>
                                            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="InnerRectangle">
                                                <EasingColorKeyFrame KeyTime="0" Value="#FF837C35"/>
                                            </ColorAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Pressed"/>
                                    <VisualState x:Name="Disabled"/>
                                </VisualStateGroup>

                            </VisualStateManager.VisualStateGroups>
                            <Rectangle x:Name="InnerRectangle" Margin="8,8,8,8" RadiusY="10" RadiusX="10" StrokeThickness="5">
                                <Rectangle.Effect>
                                    <BlurEffect/>
                                </Rectangle.Effect>
                                <Rectangle.Stroke>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#7F7E7E7E" Offset="1" />
                                        <GradientStop Color="#7F605F5F"  x:Name="GradientStop0"/>
                                    </LinearGradientBrush>
                                </Rectangle.Stroke>
                                <Rectangle.Fill>
                                    <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                                        <GradientStop Color="White" Offset="0.228"/>
                                        <GradientStop Color="#FFB0BAA1"/>
                                        <GradientStop Color="#FFB0BAA1" Offset="0.823"/>
                                    </LinearGradientBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                            <Rectangle x:Name="GlassCube" Margin="8,8,8,8" RadiusY="10" RadiusX="10" StrokeThickness="5" Opacity="1">
                                <Rectangle.Stroke>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#7FFFFFFF" />
                                        <GradientStop Color="#7FFFFFFF"/>
                                        <GradientStop Color="#F2FFFFFF" Offset="0.254"/>
                                        <GradientStop Color="#BFFFFFFF" Offset="0.401"/>
                                    </LinearGradientBrush>
                                </Rectangle.Stroke>
                                <Rectangle.OpacityMask>
                                    <RadialGradientBrush>
                                        <GradientStop Color="#FFFBFBFB" Offset="0"/>
                                        <GradientStop Color="White" Offset="1"/>
                                    </RadialGradientBrush>
                                </Rectangle.OpacityMask>
                                <Rectangle.Fill>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="White" Offset="0"/>
                                        <GradientStop Color="#FFFDFDFD"/>
                                        <GradientStop Color="#7FFEFEFE"/>
                                        <GradientStop Color="#FFFDFDFD"/>
                                        <GradientStop Color="#7FFDFDFD" Offset="0.004"/>
                                        <GradientStop Color="#FFFDFDFD"/>
                                        <GradientStop Color="#7FFDFDFD"/>
                                    </LinearGradientBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                            <ContentPresenter x:Name="myContentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsCancel" Value="False"/>
                            <EventTrigger RoutedEvent="FrameworkElement.Loaded"/>
                            <EventTrigger RoutedEvent="FrameworkElement.Loaded"/>
                            <EventTrigger RoutedEvent="FrameworkElement.Loaded"/>
                            <Trigger Property="IsEnabled" Value="False"/>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

</ResourceDictionary>

你幾乎無法修改部分模板,甚至不嘗試。

如果您需要在整個地方更改某些顏色,請將其聲明為資源,並使用DynamicResource將其引用到需要的位置,如果您將其替換為另一種顏色,則應更新所有顏色。

例如

<Color x:Key="HighlightColor">Red</Color>
<SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource HighlightColor}" />
<Border.Background>
    <LinearGradientBrush>
        <GradientStop Offset="0" Color="White" />
        <GradientStop Offset="1" Color="{DynamicResource HighlightColor}" />
    </LinearGradientBrush>
</Border.Background>
Resources["HighlightColor"] = Colors.Green;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM