当“ToggleButton”是假的时,我的PauseUpdate变成了“绿色”,但是如果我把焦点放在其他地方,它就会保持蓝色(比如焦点在)。它永远不会变红。
此外,我的文本总是“暂停”,从来没有“停顿”。为什么?
<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>
发布于 2022-08-30 00:15:46
有多个点需要修正:
TextBox
会消耗鼠标事件,从而阻止ToggleButton
响应它们。此外,它只是用来显示一个文本。所以TextBlock
是合适的。默认情况下,当
IsChecked
为true时,给出IsChecked
的ControlTemplate of ToggleButton
。若要重写它,请将普通ControlTemplate设置为Template
of Style.然后,修改后的ToggleButton
如下:
<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>
https://stackoverflow.com/questions/73535056
复制相似问题