首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF ToggleButton不想应用样式

WPF ToggleButton不想应用样式
EN

Stack Overflow用户
提问于 2022-08-29 21:52:25
回答 1查看 52关注 0票数 0

当“ToggleButton”是假的时,我的PauseUpdate变成了“绿色”,但是如果我把焦点放在其他地方,它就会保持蓝色(比如焦点在)。它永远不会变红。

此外,我的文本总是“暂停”,从来没有“停顿”。为什么?

代码语言:javascript
运行
复制
<StackPanel HorizontalAlignment="Right">
                    <ToggleButton HorizontalAlignment="Right" VerticalAlignment="Top" Margin="7" Padding="7" IsChecked="{Binding PauseUpdate}">
                        <TextBox Text="Pause" IsReadOnly="True" Background="Transparent" BorderThickness="0">
                            <TextBox.Style>
                                <Style TargetType="TextBox">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding PauseUpdate}" Value="true">
                                            <Setter Property="Text" Value="Paused" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBox.Style>

                        </TextBox>

                        <ToggleButton.Background>
                            <SolidColorBrush Color="Green" Opacity=".2"></SolidColorBrush>
                        </ToggleButton.Background>

                        <ToggleButton.Style>
                            <Style TargetType="ToggleButton">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding PauseUpdate}" Value="true">
                                        <Setter Property="Background">
                                            <Setter.Value>
                                                <SolidColorBrush Color="Red" Opacity=".2"></SolidColorBrush>
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>

                                    <DataTrigger Binding="{Binding PauseUpdate}" Value="false">
                                        <Setter Property="Background">
                                            <Setter.Value>
                                                <SolidColorBrush Color="Green" Opacity=".2"></SolidColorBrush>
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ToggleButton.Style>
                    </ToggleButton>
                    
                    <TextBox Width="60"></TextBox>
                </StackPanel>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-30 00:15:46

有多个点需要修正:

  1. TextBox会消耗鼠标事件,从而阻止ToggleButton响应它们。此外,它只是用来显示一个文本。所以TextBlock是合适的。

  1. 本地值优先于样式中的值集,从而防止Style.Triggers更改实际值。因此,移除本地值并以样式设置值。

默认情况下,当

  1. IsChecked为true时,给出IsChecked的ControlTemplate of ToggleButton。若要重写它,请将普通ControlTemplate设置为Template of Style.

然后,修改后的ToggleButton如下:

代码语言:javascript
运行
复制
<ToggleButton HorizontalAlignment="Right" VerticalAlignment="Top" Margin="7" Padding="7"
              IsChecked="{Binding PauseUpdate}">
    <TextBlock>
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Text" Value="Pause"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding PauseUpdate}" Value="true">
                        <Setter Property="Text" Value="Paused" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>

    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ButtonBase}">
                        <Border x:Name="border"
                                Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                SnapsToDevicePixels="True">
                            <ContentPresenter x:Name="contentPresenter"
                                              Margin="{TemplateBinding Padding}"
                                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                              Focusable="False" RecognizesAccessKey="True"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Background" Value="Transparent"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding PauseUpdate}" Value="true">
                    <Setter Property="Background">
                        <Setter.Value>
                            <SolidColorBrush Color="Red" Opacity=".2"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding PauseUpdate}" Value="false">
                    <Setter Property="Background">
                        <Setter.Value>
                            <SolidColorBrush Color="Green" Opacity=".2"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73535056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档