如何从 Style.Triggers 更改控件模板

发布于 2024-08-07 09:49:53 字数 2231 浏览 0 评论 0原文

我是这样做的:

    <Style x:Key="Button" BasedOn="{StaticResource LoginButton}" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <Border CornerRadius="4">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0,1">
                                <GradientStop Offset="0" Color="#0863a5" />
                                <GradientStop Offset="1" Color="#00457d" />
                            </LinearGradientBrush>
                        </Border.Background>
                    </Border>
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Border CornerRadius="4">
                                <Border.Background>
                                    <LinearGradientBrush EndPoint="0,1">
                                        <GradientStop Offset="0" Color="#508fbd" />
                                        <GradientStop Offset="1" Color="#397ab0" />
                                    </LinearGradientBrush>
                                </Border.Background>
                            </Border>
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

还有更好的方法吗?我遇到过这样的情况:我的控件模板有更多行代码,而我只需要更改单个样式,例如 BorderBrush 或其他样式。如何有效地从 Style.Triggers 更改控件模板?

I've done it this way:

    <Style x:Key="Button" BasedOn="{StaticResource LoginButton}" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <Border CornerRadius="4">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0,1">
                                <GradientStop Offset="0" Color="#0863a5" />
                                <GradientStop Offset="1" Color="#00457d" />
                            </LinearGradientBrush>
                        </Border.Background>
                    </Border>
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Border CornerRadius="4">
                                <Border.Background>
                                    <LinearGradientBrush EndPoint="0,1">
                                        <GradientStop Offset="0" Color="#508fbd" />
                                        <GradientStop Offset="1" Color="#397ab0" />
                                    </LinearGradientBrush>
                                </Border.Background>
                            </Border>
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

Is there any better way to do this? I've scenarios where my control template is having more lines of code, and I'd only require to change a single style like BorderBrush or something. How can I change control template from Style.Triggers efficiently?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨笨の傻瓜 2024-08-14 09:49:53

如果您的目的只是为边框提供不同的背景。您可以在 ControlTemplate.Triggers 中实现此目的

<Style x:Key="Button" BasedOn="{StaticResource LoginButton}" TargetType="Button">
  <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate >
        <Grid>
              <Border x:Name="brd" CornerRadius="4">
                    <Border.Background>
                        <LinearGradientBrush EndPoint="0,1">
                            <GradientStop Offset="0" Color="#0863a5" />
                            <GradientStop Offset="1" Color="#00457d" />
                        </LinearGradientBrush>
                    </Border.Background>
                </Border>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
       </Grid>
       <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Background" TargetName="brd">
                <Setter.Value>
                    <LinearGradientBrush EndPoint="0,1">
                     <GradientStop Offset="0" Color="#508fbd" />
                     <GradientStop Offset="1" Color="#397ab0" />
                    </LinearGradientBrush>
                </Setter.Value>
                </Setter>
            </Trigger>
         </ControlTemplate.Triggers>
       </ControlTemplate>
       </Setter.Value>
     </Setter>
 </Style>

If your intention is just to give a different Background to the Border. You can achieve this in the ControlTemplate.Triggers

<Style x:Key="Button" BasedOn="{StaticResource LoginButton}" TargetType="Button">
  <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate >
        <Grid>
              <Border x:Name="brd" CornerRadius="4">
                    <Border.Background>
                        <LinearGradientBrush EndPoint="0,1">
                            <GradientStop Offset="0" Color="#0863a5" />
                            <GradientStop Offset="1" Color="#00457d" />
                        </LinearGradientBrush>
                    </Border.Background>
                </Border>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
       </Grid>
       <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Background" TargetName="brd">
                <Setter.Value>
                    <LinearGradientBrush EndPoint="0,1">
                     <GradientStop Offset="0" Color="#508fbd" />
                     <GradientStop Offset="1" Color="#397ab0" />
                    </LinearGradientBrush>
                </Setter.Value>
                </Setter>
            </Trigger>
         </ControlTemplate.Triggers>
       </ControlTemplate>
       </Setter.Value>
     </Setter>
 </Style>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文